IE不遵循重定向,给出" Internet Explorer无法显示网页"

时间:2011-08-04 20:29:04

标签: internet-explorer http http-headers

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

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

如果没有 <input type=file>字段,那么它会按预期执行重定向。

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

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

注意:

  • 表单具有属性enctype="multipart/form-data"
  • 这是通过SSL发生的
  • 重定向不是与表单POST或托管在其上的URL不同的协议,主机或端口。
  • 当我使用Fiddler2检查HTTP流量时,问题就会消失,IE就会出现问题。

4 个答案:

答案 0 :(得分:8)

问题是3岁,但我最近遇到了这个问题,并没有在任何地方找到正确的答案。标记为已接受的答案并没有真正回答任何问题。

对我来说有什么不同之处是在302响应中添加了以下标题:

 Connection: close

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

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

答案 1 :(得分:6)

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

答案 2 :(得分: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");

答案 3 :(得分:1)

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

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

这在浏览器中显示为重定向页面末尾的HTML代码,后面是需要加载的实际页面的内容。

如果启用了压缩,我们会看到重定向页面的末尾后面是乱码文本(下一页的压缩版本): redirect problem with compression enabled

压缩禁用,同样的事情发生,重定向页面的结尾显示,后续页面显示。因为它是纯HTML,IE呈现它,它显示如下: redirect problem with compression disabled

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

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

我已经尝试更新执行实际重定向的Python库(Werkzeug),我已经更新了wfastcgi.py,这是将Python与IIS集成的组件,这些都没有什么区别。

我最终做了什么:

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

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

例如:

如果原始网址以/diary?targetday=2018-01-01结尾,我会将其更改为/diary?targetday=2018-01-01&test=1以使其有效。

希望这有助于某人。