Сбой запросов POST, когда set

Рассмотрим следующий случай:

  • На веб-сервере запущено приложение .NET с .
  • A клиент отправляет данные в он использует простой HttpWebRequest (без файлов cookie).

Этот, казалось бы, простой случай вызывает серьезный сбой.

Поскольку .NET не может определить, является ли запрашивающий агент ( HttpWebRequest ) поддерживает файлы cookie, он отвечает на запрос POST перенаправлением 302 Found в ту же папку:

  • файл cookie с именем AspxAutoDetectCookie в ответе
  • параметр запроса с именем AspxAutoDetectCookie в переадресованном местоположении

Затем запрашивающий агент должен запросить новое местоположение, что HttpWebRequest делает. Когда .NET видит AspxAutoDetectCookie в строке запроса, он знает, что это повторный запрос, и он может определить, поддерживаются ли файлы cookie, путем проверки наличия в запросе файла cookie с именем AspxAutoDetectCookie . Заголовки.

Проблема заключается в том, что большинство запрашивающих агентов (веб-браузеры, HttpWebRequest ) обрабатывают 302 Найденный, как будто это 303 См. Другое, и делают повторный запрос GET, независимо от исходного HTTP метод! Любые данные, отправленные в начальном запросе POST, не пересылаются.

Правильный ответ должен быть временным перенаправлением 307, которое не меняет метод запроса. (Запрос POST к расположению X перенаправляет на запрос POST к расположению Y.)

Есть ли способ изменить это поведение в. NET, поэтому запросы POST не уничтожаются?

Информация о перенаправлении 3xx

7
задан Anton 19 August 2010 в 16:43
поделиться

2 ответа

Единственное решение, которое я вижу, — добавлять AspxAutoDetectCookie=1 ко всем запросам POST.

Таким образом, ASP.NET никогда не будет перенаправлять запрос, и мы сможем вообще избежать вопроса 302 против 307. Если файлы cookie встроены в запрос, ASP.NET обнаружит, что файлы cookie поддерживаются, и, если файлы cookie не внедрены, будет считать, что это не так.

2
ответ дан 7 December 2019 в 18:38
поделиться

Есть ли какие-либо проблемы при использовании cookieless="UseDeviceProfile"? Вы можете использовать его в качестве обходного решения.

0
ответ дан 7 December 2019 в 18:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: