Internet explorer IE不';t跟随重定向,给出;Internet Explorer无法显示网页";

Internet explorer IE不';t跟随重定向,给出;Internet Explorer无法显示网页";,internet-explorer,http,http-headers,Internet Explorer,Http,Http Headers,我有一个带有几个字段的表单。提交表单时,服务器会以重定向(HTTP 302)进行响应 提交表单时,如果有字段,IE不遵循重定向,而是给出一个错误:“Internet Explorer无法显示网页” 如果没有字段,则它会按照预期执行重定向 HTTP 302响应在这两种情况下完全相同,只是响应的时间戳不同 我在IE8和IE9中体验到了这一点。(我还没有试过更低的版本)。Firefox、Chrome、Opera和Safari都按照预期进行了重定向 注: 表单具有属性enctype=“multipar

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

提交表单时,如果有
字段,IE不遵循重定向,而是给出一个错误:“Internet Explorer无法显示网页”

如果没有
字段,则它会按照预期执行重定向

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

我在IE8和IE9中体验到了这一点。(我还没有试过更低的版本)。Firefox、Chrome、Opera和Safari都按照预期进行了重定向

注:

  • 表单具有属性
    enctype=“multipart/form data”
  • 这是通过SSL实现的
  • 重定向到的协议、主机或端口与表单发布或承载到的URL不同
  • 当我使用检查HTTP通信时,问题消失,IE也会正常工作

重定向到的是部分URL还是完整URL(带有主机、协议等)?我在PHP中看到过很多例子,其中302的重定向没有完整的链接,会被IE忽略或损坏。在Rails中,这可能是路由器中foo_路径和foo_url之间的差异。

对于任何有相同问题的人,只需补充一下:

IE似乎对header命令的形成方式非常严格。我的应用程序遇到以下问题:

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

但当命令修改为:

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

这个问题已经问了3年了,但我最近自己也遇到了这个问题,没有找到正确的答案。这里标记为已接受的答案实际上什么都没有回答

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

 Connection: close
我正在重定向到另一个具有完整URL的站点,IE似乎正在尝试通过在相同TCP流上发送后续请求来优化连接,而无需重新打开它,但它不够聪明,无法发现如果标头中没有明确的“连接”指令,该站点是不同的


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

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

在我的例子中,IE11的某些安装没有正确重定向,其他安装没有正确重定向(甚至是相同版本的IE)。 当它不起作用时,IE没有检测到重定向页面的结束和下一页的开始

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

如果启用了压缩,我们将看到重定向页面的结尾,后面是乱码文本(下一页的压缩版本):

禁用压缩时,同样的情况也会发生,重定向页面的末尾显示,后续页面显示。因为它是纯HTML,IE呈现它,它显示如下:

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

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

我尝试过更新执行实际重定向的Python库(Werkzeug),我更新了wfastcgi.py,这是一个将Python与IIS集成在一起的组件,这两个东西都没有什么区别

我最终做了什么:

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

在那之后,仍然有一些重定向离开IE有问题加载。 事实证明,这些重定向在末尾有一个日期(在查询字符串中)。我在末尾添加了一个伪querystring参数,问题就解决了

例如:

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


希望这对某人有所帮助。

奇怪。302重定向将导致浏览器在目标页面上发出GET,这将丢失上载的文件(如果有的话)。也许IE的错误就是一个迹象(IE总是有糟糕的错误消息)。但这并不能解释为什么Fiddler会“修复”事情。@Marc,在服务器上它是一个Rails应用程序。它接受请求,将文件和内容保存在数据库中,然后通过重定向到另一个页面进行响应。它应该向这个新页面发出GET请求,但事实并非如此。谢谢,我将尝试一下。谢谢,这似乎有效。我觉得这是我的负载平衡器在处理w/httpswwhere来放置此配置时重写“302重定向”响应的方式的问题?@Mashit这不是配置,而是代码。在ASP.Net应用程序中,这将是:
System.Web.HttpContext.Current.Response.AddHeader(“连接”,“关闭”)
对于PHP,它是这样的:
header('Connection:close')
尽管到目前为止,我发现这只是8.Yep之前的IIS中的问题。我尝试在php中以这种方式设置标题。但似乎不起作用,我相信php会在默认情况下将其添加到标题中。你是救命恩人,伙计!在2018年,我在Firefox和Chrome上都一直在努力解决这个问题,这就解决了这个问题。
 Connection: close