今天打算复习一下http协议,写的第一个程序就遇到了麻烦,程序很简单就是展示错误页面,在firefox测试是好的,但是IE中有个小问题,把QQ的错误页面与我的错误页面比较了一下,发现原来不是程序的问题,而是IE浏览器对404、500等状态码有特殊的处理:
如果你的错误页面过于简单,比如你的404页面上只有一句话“404”,那么IE将显示默认的友好错误信息,如下图:![]()
问题原因:
Internet Explorer 5和更高版本为以下友好错误信息提供了HTML模板替换项:400.403.404.405.406.408.409.410.500.501和505。每个错误都有一个名称值对(例如“404”,512)。第一个值为错误代码。第二个值是表示字节大小的值,Internet Explorer 5或更高版本使用该值来检测何时用自己的信息替换错误信息。因此,当Internet Explorer 5版的Wininet.dll文件得到HTTP错误信息时,Wininet.dll文件将确定HTML错误中附带的HTTP内容是否为正确设计的Web 页。这是在页面大小的基础上进行的。它在注册表中对每个错误的阈值进行评估。如果Web页太小,该Web页将被拒绝,并显示友好HTTP状态Web页。
在Internet Explorer 4中,当Wininet.dll无法解决请求时,它显示一个嵌入式HTML错误信息和一个非描述性定义,例如:“Navigation Canceled”(导航已取消)或“Unable to retrieve Webpage in Offline mode”(在脱机模式下无法检索网页)。这些错误信息是Shdocvw.dll文件的资源(res:)。资源是指程序出于显示目的所使用的HTML代码,它嵌入在动态链接库(DLL)文件中。在Internet Explorer 5或更高版本中,这些错误信息是作为Shdoclc.dll文件的资源存储的。当收到错误信息时,它被相应的HTML模板取代,此模板可能包含以下任意类型的信息:
•有关此问题的信息。
•有关如何更正或解决此问题的信息。
•指向前一页的链接。
•指向Internet Explorer支持页的链接。
•指向同一页的链接,以便您能尝试重新连接到该页。
•指向缓存中的页面副本的链接(如果创建了应用程序编程接口API)。
友好HTTP状态错误信息存储在以下注册表项中:HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\ErrorThresholds。
解决此问题的办法有:
1 将页面的内容做的丰富一些,内容多一些(加一些table或者div之类的)!
JAVA代码
2 在404页面中设置状态码为200,response.setStatus(200);
3 设置IE的选项 工具–>Internet选项–>高级—>显示友好http错误信息(取消选择) 。
ps:在firefox下如果用了google的工具条也会有一样的问题,当然解决办法也是一样的!
