Post-Redirect-Get с помощью Internet Explorer - PullRequest
10 голосов
/ 28 марта 2012

У меня есть веб-страница, которая реализует шаблон post / redirect / get , чтобы избежать двойных публикаций в простом приложении CRUD.

Предполагаемая последовательность запросов / ответов здесь:

  1. браузер отправляет данные через POST
  2. сервер изменяет БД, отвечает статусом 302 Moved Temporarily и заголовок Location
  3. браузер выполняет перенаправление через GET
  4. сервер отвечает обновленной страницей

Вот как это должно работать - и это работает, например, в Chrome.

Internet Explorer 9,однако отправляет шаг 3 как POST (включая полный набор данных формы!).Зачем?Что мне нужно сделать, чтобы использовать GET?

Я должен добавить, что кроме строки запроса перенаправление идет в то же место, что и цель формы.

Я пробовал:

  • все доступные режимы рендеринга (IE7, IE8, IE9, Quirks, Standards, Compat)
  • полный DOCTYPE
  • относительный URL или абсолютный вLocation заголовок
  • HTTP-статус 303 (просто чтобы понять, имеет ли это какое-то значение)

Ответы [ 3 ]

4 голосов
/ 29 марта 2012

Правильный код состояния, если вы хотите GET: 303 , хотя 301 и 302 также будут делать то, что вы хотите в обычных браузерах.

Если это не работает, возможно, что-то еще не так. HTTP-трассировка будет полезна для нахождения ошибки.

3 голосов
/ 16 января 2013

Я не уверен, но кажется, что IE9 на самом деле не отправляет «POST» после перенаправления 30x - он просто отображает его в своем внутреннем отладчике.

2 голосов
/ 20 июля 2016

Я заметил подобное поведение. Оказывается, внутренний отладчик IE11 сообщал о POST, но, используя стороннее приложение (Fiddler), сообщал, что запрос был GET. Если вы видите POST в ответ на 303/302, дважды проверьте его с помощью внешнего приложения.

...