Рассмотрим следующий случай:запросы POST терпят неудачу, когда <sessionState Cookieless = "AutoDetect" /> установлено
- Веб-сервер работает приложение .NET с
<sessionState cookieless="AutoDetect" />
. - Клиент отправляет данные на него с помощью простого
HttpWebRequest
(без файлов cookie).
Этот, казалось бы, простой случай вызывает серьезный сбой.
Поскольку .NET не может определить, является ли запрашивающий агент (HttpWebRequest
) поддерживает куки, он отвечает на запрос POST с 302 Найдено перенаправлением на то же место с:
- печенья под названием
AspxAutoDetectCookie
в ответ - параметр запроса с именем
AspxAutoDetectCookie
в пересылаемом месте
запрашивающая агент затем должен запросить новое место, которое HttpWebRequest
делает. Когда .NET видит AspxAutoDetectCookie
в строке запроса, он знает, что это повторный запрос, и он может определить, поддерживаются ли файлы cookie, если в заголовках запроса находится файл cookie с именем AspxAutoDetectCookie
.
Проблема заключается в том, что большинство запрашивающих агентов (веб-браузеры, HttpWebRequest
) относятся к 302 найденному, как если бы это 303 См. Раздел «Другое» и перепродайте GET, независимо от исходного метода HTTP! Любые данные, отправленные в исходном запросе POST, не пересылаются.
Правильный ответ должен быть временным перенаправлением 307, который не меняет метод запроса. (Запрос POST в адрес X перенаправляется на адрес POST запрос на адрес Y.)
Есть ли способ изменить это поведение в .NET, поэтому запросы POST не будут уничтожены?
Information on 3xx redirection
Не работает здесь, по крайней мере. Все еще сбрасывает данные сообщения. – Karlth
Он работает, если мы добавляем заголовок: 'Cookie: AspxAutoDetectCookie = 1'. – Artyom