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, дважды проверьте его с помощью внешнего приложения.