У меня есть очень простой класс, использующий HttpListener для получения HTTP POST из браузера через запрос AJAX.Я включил демонстрацию, которая освещает эту проблему:
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());
}
}
}
Я также использую следующий Javascript в Firefox (используя 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 всегда содержит около 900 байтов при отправке из Firefox.Если я помещу Fiddler между Firefox и моим приложением, он корректно отправит все 9900 байт.Но при отправке прямо из Firefox в мое приложение отправляются только первые 900 символов (закодированных как UTF8, то есть 900 байтов).
Если я использую curl для публикации данных в моем приложении, это работает отлично.Fiddler также может публиковать данные в моем приложении и правильно их читать.Fiddler может читать данные, отправленные на него из Firefox, но мое приложение не может.
При разных размерах html отправляются разные суммы, но это одинаково для одних и тех же страниц.Независимо от размера, оно всегда отправляется от 899 до 999 байт.Если страница меньше 900 байт, она работает и правильно читает все данные из InputStream.
Одна из моих теорий заключалась в том, что она могла отправлять 1024 байта, но заголовки http потребляли некоторые из этих байтов,но заголовки http значительно больше ~ 120 байт.
Одна вещь, которую я должен упомянуть, это то, что этот JS работает из расширения Firefox с импортированным jquery.Я не думаю, что это вызывает проблему, поскольку я сталкиваюсь с той же самой проблемой, когда запускаю тот же Javascript изнутри страницы.