我有一个包含几个字段的表单。提交表单时,服务器将使用重定向进行响应(HTTP 302)。
提交表单时,如果有<input type=file>
字段,IE不会遵循重定向,而是会出错:“Internet Explorer无法显示网页”。
如果没有 <input type=file>
字段,那么它会按预期执行重定向。
在两种情况下,HTTP 302响应完全相同,只是区别于响应的时间戳。
我在IE8和IE9中遇到过这种情况。 (我没有尝试过较低版本)。 Firefox,Chrome,Opera和Safari都按照预期重定向。
注意:
enctype="multipart/form-data"
。答案 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代码,后面是需要加载的实际页面的内容。
如果启用了压缩,我们会看到重定向页面的末尾后面是乱码文本(下一页的压缩版本):
压缩禁用,同样的事情发生,重定向页面的结尾显示,后续页面显示。因为它是纯HTML,IE呈现它,它显示如下:
很明显,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
以使其有效。
希望这有助于某人。