我有一个非常简单的类,它使用HttpListener通过AJAX请求从浏览器接收HTTP POST。我提供了一个演示,突出了这个问题:
private static void HandleRequest(HttpListenerContext context)
{
using (var inputStream = context.Request.InputStream)
{
for (int i = 0; i < context.Request.ContentLength64; i++)
{
Console.WriteLine("{0}:\t{1}", i, inputStream.ReadByte());
}
}
}
我还在Firefox中使用以下Javascript(使用jQuery):
upload_html: function(html){
jQuery.ajax({
type: 'POST',
data: html,
url: 'http://localhost:8080/api/html?url=' + escape(content.document.location),
success: function(data) {
// do stuff
}
});
}
我遇到的问题是InputStream从Firefox发送时只包含大约900个字节。如果我把Fiddler放在Firefox和我的应用程序之间,它会正确地发送所有9900字节。但是当直接从Firefox发送到我的应用程序时,只发送前900个字符(编码为UTF8,所以是900个字节)。
如果我使用curl将数据发布到我的应用程序中,它将非常有效。Fiddler还能够将数据发布到我的应用程序中,并使其正确读取。Fiddler能够从Firefox读取发布到它的数据,但我的应用程序不能。
我的一个理论是,它可能发送1024个字节,但是http报头消耗了其中的一些字节,但是http报头比~120个字节大得多。