У меня есть веб-страница, которая реализует шаблон post/redirect/get, чтобы избежать двойных сообщений в простом приложении CRUD.Post-Redirect-Get with Internet Explorer
Намеченный запрос/ответная последовательность здесь:
- браузер отправляет данные через
POST
- сервер изменяет базу данных, отвечает статусу
302 Moved Temporarily
иLocation
заголовка - браузер выполняет перенаправление через
GET
- сервер отвечает обновленной страницей
Вот как это должно работать - и это происходит, например, в Chrome.
Internet Explorer 9, однако, отправляет шаг 3 как POST
, также (включая полный набор данных формы!). Зачем? Что делать, чтобы использовать его GET
?
Я должен добавить, что помимо строки запроса перенаправление переходит в то же место, что и целевой объект формы.
Я пробовал:
- все доступные режимы рендеринга (IE7, IE8, IE9, причуды, стандарты, Compat)
- полный DOCTYPE
- относительный URL или абсолютный один в
Location
заголовок - HTTP Status 303 (просто чтобы увидеть, если это делает никакой разницы)
Работает для меня с самым простым примером, без DOCTYPE и т. Д. Вы уверены, что IE9 действительно отправляет второй идентичный запрос POST? Нет прокси или что-нибудь еще посередине? – Jon
Ну, глядя на вкладку сети в отладчике, мне это говорит. Сервер также получает POST. – Tomalak
RFC 2616 для HTTP/1.1 указывает, что в разделе 10.3.3 для [определения кода состояния] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) браузер, реагирующий на '302', ответ должен * не * изменять используемый метод - поэтому POST должен оставаться POST. IE действительно делает это правильно. Но '303' * должен * стать GET, поэтому IE делает *, что * неправильно, в соответствии с вашей последней точкой маркера. –