【问题标题】:Post-Redirect-Get with Internet Explorer使用 Internet Explorer 进行重定向后获取
【发布时间】:2012-03-28 16:53:25
【问题描述】:

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

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

  1. 浏览器通过POST发送数据
  2. 服务器修改数据库,响应状态302 Moved TemporarilyLocation标头
  3. 浏览器通过GET 跟随重定向
  4. 服务器响应更新页面

这就是它应该如何工作的——它确实如此,例如在 Chrome 中。

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

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

我试过了:

  • 所有可用的渲染模式(IE7、IE8、IE9、Quirks、Standards、Compat)
  • 完整的 DOCTYPE
  • Location 标头中的相对 URL 或绝对 URL
  • HTTP 状态 303(只是看看这是否有什么不同)

【问题讨论】:

  • 用最简单的例子为我工作,根本没有 DOCTYPE 等等。你确定 IE9 实际上确实发送了第二个相同的 POST 请求吗?中间没有代理或其他任何东西?
  • 好吧,查看调试器中的网络选项卡告诉我这一点。服务器也会收到一个 POST。
  • RFC 2616 for HTTP/1.1 声明,在第 10.3.3 节中,status code definitions 响应 302 响应的浏览器应该更改正在使用的方法 -所以一个 POST 应该是一个 POST。 IE实际上做得对。但是根据您的最后一个要点,303 应该 变成 GET,所以 IE 做错了那个
  • @StephenP 我明天再试试。感谢您提供规范的链接。
  • 对此有解决方案吗?我在 IE10 和 IE11 中看到了相同的行为。即使发送 303 响应也不起作用。

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


【解决方案1】:

如果你想要一个 GET,正确的状态码是 303,虽然 301 和 302 在普通浏览器中也能满足你的需求。

如果这不起作用,则可能是其他问题。 HTTP 跟踪有助于找出问题所在。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 不确定它是否与OP相同的问题,但它非常相似(Post-Redirect-Get + IE9)。我刚刚确认它是我的调试器。
    • 我也是。在 IE9 模式下,网络开发面板显示 POST->POST for 303 但服务器说它正在接收 POST->GET。 :(
    【解决方案3】:

    我注意到类似的行为。结果 IE11 的内部调试器正在报告 POST,但使用第三方应用程序(Fiddler)将请求报告为 GET。如果您看到响应 303/302 的 POST,请使用外部应用仔细检查。

    【讨论】:

      猜你喜欢
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多