仅在 IE8 中怎么可能出现 404 响应?

Posted

技术标签:

【中文标题】仅在 IE8 中怎么可能出现 404 响应?【英文标题】:How is it possible a 404 response just only in IE8? 【发布时间】:2012-01-16 05:10:24 【问题描述】:

我在 Tomcat 服务器中部署了一个 Spring 应用程序(带有 Spring Security 和 Spring MVC)。该应用程序在 Firefox、Chrome、Opera 和 IE9 中完美运行。

我对 IE8 有一个奇怪的问题。登录屏幕加载,并且(正如我在服务器日志中看到的)当提供用户名和密码时会话是打开的。一旦用户登录,并且浏览器被重定向到主页,服务器就会返回一个 404 错误。

由于 IE8 开发者工具没有网络面板,我使用 Fiddler 来监控 http 连接。我认为它可能发生在页面加载期间它发出了错误的请求,但它是响应 404 的主页请求。

服务器怎么可能只在 IE8 中以 404 响应主页请求?

谢谢。

已编辑:

这些分别是 IE8 和 Firefox 的请求标头:

GET /myWebApp/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: es-ES
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; .NET4.0C; .NET4.0E)
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
Host: dev.mydomain.com
Connection: Keep-Alive
Cookie: JSESSIONID=ABA1382304002F894ABDFCC2442FA5F8; SPRING_SECURITY_REMEMBER_ME_COOKIE=NGUxMTZlOTY3OGM0OTgxNDY4NDczOTlkOjEzMjQ1ODMwMzU0MDI6OWZiYzdhYjY1ODY2Mzc3YmI0Yzc5YTMzMWI5NDhjNTg

--

GET /myWebApp/ HTTP/1.1
Host: dev.mydomain.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,chrome://global/locale/intl.properties;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Cookie: JSESSIONID=7FD3B02252E2FCBC9BE7249AFD84F541; SPRING_SECURITY_REMEMBER_ME_COOKIE=NGUxMmYxMTgzMmRjZTM0NzYyMWVjOWEwOjEzMjQ1ODMwMTA1MTU6MzFiYzU4OGQ4NTMwN2Y3M2I4YmQzN2M0NzY2MzcwZjI

【问题讨论】:

如果您已经在使用 Fiddler,您可以比较 IE8 和工作浏览器发送的请求(包括标头)。解锁并开始编辑 IE8 请求,直到你得到一些有用的东西。这显然不会为您的用户解决问题,但至少会告诉您在哪里查看。也许由于某种原因,IE8 在请求您的主页时没有发送与登录相关的 cookie? 谢谢我已经按照你说的做了,我没有找到任何关于问题所在的线索。我将编辑帖子,在这两种情况下添加标题。 我发现将 IE8 请求中的“接受”更改为 Firefox 请求中的“接受”(Accept: text/html,application/xhtml+xml,application/xml;q=0.9, /;q=0.8) 它可以工作,所以我想我必须将我的应用配置为 IE8 发送的“接受”值。 这听起来很奇怪,但也许您的服务器认为它不能以 IE 接受的格式表示请求的资源(即使您的 IE 标头包含通配符 '/'),因此返回 404。我猜这是服务器配置问题,而不是您的应用程序中的问题(尽管在 Tomcat 中我已经超出了我的深度)。也许是顺序导致了问题 - 根据 IE 接受标头内容的顺序,尝试返回比 text/html 更高优先级的格式?祝你好运! 【参考方案1】:

知道问题是关于“接受”的,我已经修改了 MVC 控制器类映射,我终于找到了问题。不知何故,这是在 MVC 中映射主页的方式,因此它不适用于 IE8 标头属性:

@RequestMapping( value = "/", headers = "Accept=text/*" )

我今天学到了一个惨痛的教训。 ;-)

【讨论】:

这对我有帮助 - 我不明白为什么每次我去“/”时 IE 都会尝试下载电子表格(我有另一个页面生成电子表格),但在FF 它会工作得很好。感谢您的解决方案。 我不明白,我必须在某处添加这一行?

以上是关于仅在 IE8 中怎么可能出现 404 响应?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 路由仅在 phpunit 测试期间返回 302 而不是 404 响应

GMAIL API 历史端点仅在 Android 上返回 404 not found 响应代码

我的IE8浏览器总是卡死,没有响应,求解决方法。

Rails 在 CORS 预检选项请求中以 404 响应

如何添加 404 页面以响应嵌套路由?

我的手机经常出现无响应是怎么回事?