Отсутствуют параметры POST с прокси-серверами - PullRequest
7 голосов
/ 01 апреля 2011

мы сталкиваемся со странным поведением в нашем веб-приложении.Некоторые запросы POST не имеют тела http, когда они должны.content-length равен 0. Нет параметров записи вообще.Мы отследили сетевой трафик на нашем loadbalancer и видим, что мы не получаем никакого тела запроса с некоторыми из наших запросов POST.

Общим для всех поврежденных запросов POST является то, что они поступают через прокси-сервер.

Мы уже нашли этот вопрос на SO: Почему «Content-Length: 0» в запросах POST?

Мы сейчас используем подпрограмму escape-фрейма javascript, и это немного помогает.Кажется, что уровень ошибок падает.Но у нас все еще есть POST-запросы без данных, которые никогда не должны происходить в нашем веб-приложении.Эти запросы не приходят от хакеров или так.

Часто мы видели веб-машину в качестве прокси.Но большую часть времени мы не видим, какой прокси используется.

В этом PDF-файле мы увидели комментарий об отсутствующих параметрах POST в веб-машине

WebWasher - Руководство по прозрачной аутентификации

Примечания к некоторым подводным камням

Обратите внимание, что при настройке прозрачной аутентификации необходимо учитывать некоторые подводные камни:

POST-запросы не будут работать, если ICAPСервер отправляет перенаправление на сервер аутентификации.Это влияет, однако, только на возобновление сопоставления, поскольку для браузера запрос был успешным, и тело POST не будет отправлено снова после окончательного перенаправления.

Мы хотели бы знать, есть лиэто обходной путь, отличный от использования только GET вместо POST.Также было бы здесь, если бы у других сайтов были проблемы с отсутствующими данными POST и к какому выводу они пришли.

Существуют ли другие причины, по которым данные POST не отправляются?

Ответы [ 3 ]

2 голосов
/ 25 мая 2011

У меня были проблемы с прокси-сервером Microsoft, который плохо воспроизводил веб-запросы.

Мне пришлось прибегнуть к принудительному использованию HTTP / 1.0 и установить для свойства KeepAlive значение false.

Есть что-то в том, как работает аутентификация NTLM, которая вызывает отправку тела спорадически.

Я добавил это во многие мои веб-запросы

protected override WebRequest GetWebRequest(Uri uri)
{
    HttpWebRequest webRequest = (HttpWebRequest) base.GetWebRequest(uri);

    webRequest.KeepAlive = false;
    webRequest.ProtocolVersion=HttpVersion.Version10;
    return webRequest;
}

Надеюсь, это поможет!

0 голосов
/ 25 мая 2012

Наверное, не совсем ответ, но я прибыл сюда, потому что у нас была похожая проблема.Первоначально мы думали, что это связано с мобильностью клиентов, поскольку это была общая тема, но теперь мы поняли, что общий знаменатель - это прокси.

Теперь мы поднимаем http 400, когда это происходит.

Вот несколько прокси, с которыми у нас были проблемы.Отправьте их, чтобы привести случайного гуглера здесь:

  • 1.1 ACISA02S, 1.1 abc:3328 (squid/2.6.STABLE21)
  • 1.1 ipcop00.cat.local:8000 (squid/2.6.STABLE21)
  • 1.1 PRXTGLSRV01
  • 1.1 ISA
0 голосов
/ 01 апреля 2011

Нет тех, которые соответствуют спецификации :

Некоторые методы HTTP ДОЛЖНЫ приводить к тому, что кеш делает объект недействительным. ... POST

(спецификация HTTP / 1.0 гласит: «Приложения не должны кэшировать ответы на POST-запрос»).

Но есть много плохо написанного кода.

Какие заголовки вы включаете в ответы на сообщения POST по URL-адресам?

...