Рассмотрим следующий случай:
. HttpWebRequest
(без файлов cookie). Этот, казалось бы, простой случай вызывает серьезный сбой.
Поскольку .NET не может определить, является ли запрашивающий агент ( HttpWebRequest
) поддерживает файлы cookie, он отвечает на запрос POST перенаправлением 302 Found в ту же папку:
AspxAutoDetectCookie
в ответе AspxAutoDetectCookie
в переадресованном местоположении Затем запрашивающий агент должен запросить новое местоположение, что HttpWebRequest
делает. Когда .NET видит AspxAutoDetectCookie
в строке запроса, он знает, что это повторный запрос, и он может определить, поддерживаются ли файлы cookie, путем проверки наличия в запросе файла cookie с именем AspxAutoDetectCookie
. Заголовки.
Проблема заключается в том, что большинство запрашивающих агентов (веб-браузеры, HttpWebRequest
) обрабатывают 302 Найденный, как будто это 303 См. Другое, и делают повторный запрос GET, независимо от исходного HTTP метод! Любые данные, отправленные в начальном запросе POST, не пересылаются.
Правильный ответ должен быть временным перенаправлением 307, которое не меняет метод запроса. (Запрос POST к расположению X перенаправляет на запрос POST к расположению Y.)
Есть ли способ изменить это поведение в. NET, поэтому запросы POST не уничтожаются?
Единственное решение, которое я вижу, — добавлять AspxAutoDetectCookie=1
ко всем запросам POST.
Таким образом, ASP.NET никогда не будет перенаправлять запрос, и мы сможем вообще избежать вопроса 302 против 307. Если файлы cookie встроены в запрос, ASP.NET обнаружит, что файлы cookie поддерживаются, и, если файлы cookie не внедрены, будет считать, что это не так.
Есть ли какие-либо проблемы при использовании cookieless="UseDeviceProfile"? Вы можете использовать его в качестве обходного решения.