重定向后 - 使用Internet Explorer获取

时间:2012-03-28 16:53:26

标签: internet-explorer http post-redirect-get

我有一个实现 post / redirect / get 模式的网页,以避免在简单的CRUD应用程序中发布双重帖子。

这里的预期请求/响应序列是:

  1. 浏览器通过POST
  2. 发送数据
  3. 服务器修改数据库,以状态302 Moved TemporarilyLocation标题回复
  4. 浏览器通过GET
  5. 进行重定向
  6. 服务器使用更新的页面进行响应
  7. 这就是它应该如何工作 - 例如,它确实在Chrome中运行。

    然而,Internet Explorer 9也将第3步发送为POST(包括完整的表单数据集!)。为什么?我该怎么做才能使用GET

    我应该补充说,除了查询字符串之外,重定向会转到与表单目标相同的位置。

    我试过了:

    • 所有可用的渲染模式(IE7,IE8,IE9,Quirks,Standards,Compat)
    • 完整的DOCTYPE
    • Location标题
    • 中的相对网址或绝对网址
    • HTTP状态303(只是为了看看是否有任何区别)

3 个答案:

答案 0 :(得分:4)

如果您想要GET,正确的状态代码是 303 ,尽管301和302也可以在常见浏览器中执行您想要的操作。

如果这不起作用,其他可能是错误的。 HTTP跟踪有助于找到错误。

答案 1 :(得分:3)

我不确定,但似乎IE9在重定向30x后实际上并没有发送“POST” - 它只是在内部调试器中显示它。

答案 2 :(得分:2)

我注意到了类似的行为。事实证明,IE11的内部调试器报告了一个POST,但是使用第三方应用程序(Fiddler),它将请求报告为GET。如果你看到一个POST响应303/302,请用外部应用程序仔细检查。