【问题标题】:IE doesn't follow redirect, gives "Internet Explorer cannot display the webpage"IE 不遵循重定向,给出“Internet Explorer 无法显示网页”
【发布时间】:2011-08-04 20:29:04
【问题描述】:

我有一个包含几个字段的表单。当您提交表单时,服务器会以重定向 (HTTP 302) 进行响应。

提交表单时,如果有<input type=file>字段,IE不跟随重定向,而是报错:“Internet Explorer无法显示网页”。

如果有 no <input type=file> 字段,那么它确实会按照预期进行重定向。

HTTP 302 响应在两种情况下完全相同相同,只是响应的时间戳不同。

我在 IE8 和 IE9 中遇到了这种情况。 (我没有尝试过较低的版本)。 Firefox、Chrome、Opera 和 Safari 都按预期遵循重定向。

注意事项:

  • 表单具有属性enctype="multipart/form-data"
  • 这是通过 SSL 发生的
  • 重定向到的协议、主机或端口与表单发布到或托管的 URL 不同。
  • 当我使用 Fiddler2 检查 HTTP 流量时,问题消失并且 IE 正常运行。

【问题讨论】:

  • 奇数。 302 重定向会导致浏览器在目标页面上发出 GET,这会丢失上传的文件(如果有)。也许 IE 的错误表明了这一点(而 IE 总是有蹩脚的错误消息)。不过,没有解释为什么 Fiddler 会“修复”问题。
  • @Marc,在服务器上它是一个 Rails 应用程序。它接受请求,将文件和内容保存在数据库中,然后响应重定向到另一个页面。它应该向这个新页面发出 GET 请求,但事实并非如此。

标签: internet-explorer http http-headers


【解决方案1】:

这个问题已有 3 年历史,但我最近自己遇到了这个问题,但在任何地方都没有找到正确的答案。此处标记为已接受的答案并没有真正回答任何问题。

对我来说不同的是,在 302 响应中添加了以下标头:

 Connection: close

我正在重定向到具有完整 URL 的另一个站点,看起来 IE 正在尝试通过在同一 TCP 流上发送后续请求而不重新打开它来优化连接,但它不够聪明,无法确定该站点是在标题中没有明确的“连接”指令的情况下有所不同。

至少在 IE10 和 IE11 中会发生这种情况,其他浏览器都没有这个问题。

【讨论】:

  • 把这个配置放在哪里?
  • @Mashit 这不是配置 - 它是代码。在 ASP.Net 应用程序中,这将是:System.Web.HttpContext.Current.Response.AddHeader("Connection", "close"); 在 PHP 的情况下,它将是这样的:header('Connection: close') 虽然到目前为止我发现这只是 IIS 8 之前的问题。
  • 是的。我尝试在 php.ini 中以这种方式设置标题。但似乎不起作用
  • 我相信php会默认将其添加到标题中。 php.net/manual/en/function.header.php
  • 你是救生员,伙计!即使在 2018 年,我也一直在 Firefox 和 Chrome 上为此苦苦挣扎,这解决了它。
【解决方案2】:

您是重定向到部分 URL 还是完整 URL(包含主机、协议等)?我在 PHP 中看到了很多示例,其中 302 的重定向中没有完整的 http://server.dom/path/to/file 将被 IE 忽略或破坏。在 Rails 中,这可能是路由器中 foo_path 和 foo_url 之间的区别。

【讨论】:

  • 谢谢,我去试试。
  • 谢谢,这似乎有效。我感觉这是我的负载均衡器在处理 HTTPS 时重写“302 重定向”响应的方式存在问题
【解决方案3】:

只是为遇到同样问题的人补充一下:

IE 似乎对 header 命令的形成方式非常严格。我的应用程序遇到了困难:

header("location:http://www.test.co.uk/test/test.php");

header("location:test.php");

但是当命令修改为时开始工作:

header("Location: http://www.test.co.uk/test/test.php");

【讨论】:

    【解决方案4】:

    给遇到此问题的人的另一个提示:

    在我的情况下,某些安装的 IE11 没有正确重定向,其他安装(甚至是完全相同的 IE 版本)。 当它不起作用时发生的情况是 IE 没有检测到重定向页面的结尾,以及下一页的开头

    这在浏览器中表现为重定向页面末尾的一段 HTML 代码,紧接着是需要加载的实际页面的内容。

    如果启用了压缩,我们会看到重定向页面的末尾出现乱码(下一页的压缩版本):

    使用压缩禁用,同样的事情会发生,重定向页面显示结束,后续页面显示。因为它是纯 HTML,所以 IE 会呈现它,它显示如下:

    很明显,IE 没有检测到重定向页面何时结束,而下一页开始。

    我们在服务器上的 IIS 下运行 Python/Flask。 我们有完全相同的 IE 版本,其中一个浏览器会出现这个问题,而另一个不会。我们仔细比较了所有设置,但我们无法在正常工作的浏览器上重现问题,反之亦然。

    我尝试更新执行实际重定向的 Python 库 (Werkzeug),我更新了 wfastcgi.py,将 Python 与 IIS 集成的组件,这两件事都没有影响。

    我最终做了什么:

    使用完整 URL 进行重定向在很多情况下都有效。因此,我们确保所有重定向都使用绝对 URL,而不是相对 URL。

    在那之后,仍然存在一些重定向,IE 无法加载。 事实证明,这些重定向最后有一个日期(在查询字符串中)。我在最后添加了一个虚拟查询字符串参数,问题就消失了。

    例如:

    如果原始 URL 以 /diary?targetday=2018-01-01 结尾,我会将其更改为 /diary?targetday=2018-01-01&test=1 以使其正常工作。

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 2012-01-11
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多