Post-Redirect-Get с Internet Explorer
У меня есть веб-страница, которая реализует шаблон post/redirect/get, чтобы избежать двойных сообщений в простом CRUD-приложении.
Предполагаемая последовательность запросов/ответов:
- браузер отправляет данные через
POST
- сервер изменяет БД, отвечает со статусом
302 Moved Temporarily
и заголовком Location
- браузер следует за перенастройкой через
GET
Сервер - отвечает на обновленную страницу
Вот как он должен работать - и это происходит, например, в Chrome.
Однако Internet Explorer 9 также отправляет шаг 3 как POST
(включая полный набор данных формы!). Зачем? Что делать, чтобы использовать GET
?
Я должен добавить, что помимо строки запроса перенаправление переходит в то же место, что и целевой объект формы.
Я пробовал:
- все доступные режимы рендеринга (IE7, IE8, IE9, Quirks, Standards, Compat)
- полный DOCTYPE
- относительный URL-адрес или абсолютный в заголовке
Location
- Состояние HTTP 303 (просто чтобы узнать, не имеет значения)
Ответы
Ответ 1
Правильный код состояния, если вы хотите GET, равен 303, хотя 301 и 302 также будут делать то, что вы хотите, в обычных браузерах.
Если это не работает, возможно, что-то еще не так. Трассировка HTTP была бы полезной для определения того, что не так.
Ответ 2
Я не уверен, но похоже, что IE9 фактически не отправил "POST" после перенаправления 30x - он просто отображает его во внутреннем отладчике.
Ответ 3
Я заметил подобное поведение. Оказывается, внутренний отладчик IE11 сообщал POST, но с помощью стороннего приложения (Fiddler) он сообщал, что запрос является GET. Если вы видите POST в ответ на 303/302, дважды проверьте его с помощью внешнего приложения.