解决ie下自定义http错误页太小不显示并导致显示默认友好错误页问题

上传人:第*** 文档编号:31526761 上传时间:2018-02-08 格式:DOC 页数:7 大小:102.50KB
返回 下载 相关 举报
解决ie下自定义http错误页太小不显示并导致显示默认友好错误页问题_第1页
第1页 / 共7页
解决ie下自定义http错误页太小不显示并导致显示默认友好错误页问题_第2页
第2页 / 共7页
解决ie下自定义http错误页太小不显示并导致显示默认友好错误页问题_第3页
第3页 / 共7页
解决ie下自定义http错误页太小不显示并导致显示默认友好错误页问题_第4页
第4页 / 共7页
解决ie下自定义http错误页太小不显示并导致显示默认友好错误页问题_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《解决ie下自定义http错误页太小不显示并导致显示默认友好错误页问题》由会员分享,可在线阅读,更多相关《解决ie下自定义http错误页太小不显示并导致显示默认友好错误页问题(7页珍藏版)》请在金锄头文库上搜索。

1、解决 IE 下自定义 HTTP 错误页太小不显示并导致显示默认友好错误页问题今天研究起 WordPress 的评论发布页 wp-comments-post.php,假如我们提交一个不是期望的评论,比如我们什么都不写就点击提交评论,然后 WordPress 将交由 wp-comments-post.php 处理,当然这次处理将以失败告终, WordPress 将显示一条错误消息,比如:“错误:请填写必填项目(姓名和电子邮件地址)。”。好了,这时如果我们右击查看源代码会找到一段奇怪的字符串:看似杂乱无章的字符串,有什么实际作用呢?好在我看到了这么一句话 Ticket #11289, IE bug

2、fix: always pad the error page with enough characters such that it is greater than 512 bytes, even after gzip compression,貌似和 IE 什么 Bug 有关系,立即 Google 之,找到了WordPress 原先的 Bug 处理页 Internet Explorer, 512-byte error page fix doesnt work. Neglects gzip compression.。通过上述描述得知当自定义 HTTP 错误页(Custom HTTP Error

3、Page)体积过小,小于一个临界阈值(thresholds)时,IE 浏览器将自动以内部错误页面 (Microsoft-stylin error page)来取代你的自定义错误页。什么意思呢?首先我们要理解什么是自定义 HTTP 错误页。当然要理解 HTTP 状态码(HTTP Status Code),比如说我们找不到页面时服务器将返回一个 404 状态码,表示找不到页面,当我们进行 301 或者 302 重定向时也是通过这个状态码来进行,当然还要有一些附加信息,比如状态,这些信息是写到 HTTP 相应头(HTTP Response Header)里的,只有浏览器等客户端可以“ 看到” 并理解

4、这些信息,然后翻译传达给我们,这里给个找不到页面的status header:HTTP/1.1 404 Not FoundServer: nginxDate: Mon, 05 Mar 2012 08:20:41 GMTContent-Type: text/htmlContent-Length: 564Connection: keep-aliveKeep-Alive: timeout=5其中 HTTP/1.1 404 Not Found 这个就是我们要关注的,HTTP 表示协议,1.1 表示版本,404 表示状态码,Not Found 表示状态,那么这个 Header 等于告诉浏览器找不到页面,

5、我刚才说了这个是由服务器发送的,当然也是我故意访问了一个不存在的页面,服务器才发送这个 404 消息,学过任何一种 Web 编程语言的同学知道,其实这个也是可以自定义的,比如在 PHP 中,我们这样写可以实现同样的功能,即使这个页面是存在的:好了,这里我为了便于演示,换一种状态代码 500,表示服务器错误:现在访问这个页面表明我们自定义了一个 500 内部服务器错误的 HTTP 错误页,而且浏览器等客户端也可以理解这种错误页,当然我们需要提供一些其他信息来告知我们的访问者,当前页面出错了:Error当前页面出错咯小提示:header 必须在任何 HTML 或者文本输出前发送,否则无效。好啦,把

6、上面的代码写入到 500.php 文件里并上传服务器,然后再通过浏览器浏览,Chrome 下显示正常为“ 当前页面出错咯” 我们设定的文本, IE 下却显示其内部内置的“HTTP 500 内部服务器错误,无法显示网页,您要访问的网页有问题,无法显示。”,如下图所示:这个页面很熟悉?是的,搞 ASP 开发的同学肯定有印象,而且需要修改“Internet 选项”,高级选项卡,去掉“显示友好 HTTP 错误信息”的钩才能将我们自定义的错误文本显示出来。让我们的客户去改浏览器设置?呵呵,这当然是不现实的,可能有同学要问:为什么有些网站的自定义 HTTP 错误的自定义文本能够正常显示,比如一些站漂亮的

7、404 页面。说了这么多,这个就是我们今天要研究的问题。让我们回到本文一开始那个 IE Bug,其实这个 Bug 也反映了这个问题,当服务器响应的内容长度小于一定的临界阈值(thresholds)时,IE 浏览器将自动忽略服务器在响应头发送完后的自定义文本,也就是我们设定的文字被 IE 忽略了,取而代之的是 IE 自家的内部错误页面(Microsoft-stylin error page)。我们看下刚才那个页面的 size:对于 500 错误的阈值 IE 默认设置为 512 bytes(更多的阈值稍后介绍),很明显刚才我们构造的页面不足 512 bytes,所以 IE 没有显示我们的页面,好了

8、,大家肯定在想,如果大于这个阈值(thresholds),那么我们的页面不就能够正常显示了?恭喜你,回答正确!比如我们将页面人为的填充垃圾值,使其大于 512 字节,当然为了不影响整体页面,我们将其放入到 HTML 注释中:Error当前页面出错咯很明显现在页面 size 大于 512 这个阈值了,假如我们现在用 IE 访问这个页面,即使不关闭显示友好 HTTP 错误信息,也会显示我们自己的消息文本了。当然这里需要注意的还有 Gzip,如果说这里页面本来就大于 512 个字节,但是 gzip 压缩输出后页面却小于了 512 个字节,那么 IE 依旧会用自己的错误页取代我们的错误也,所以这里填充

9、的垃圾值要考虑到这个问题,由于压缩的特性,重复字符压缩效率高,我们为了扩充体积不希望看到这个效果,所以需要使用不重复的乱字符填充,恐怕这也是为什么一开始 WP 的杂乱字符填充的原因吧。竟然这个阈值有这样神奇的效果,那我们如何获取不同错误页面的 IE 默认临界阈值呢?下面列出一张表供大家参考:代 码 描 述 文 件 大 小 ( 阈 值 )400 Bad Request 512 bytes403 Forbidden 256 bytes404 Not Found 512 bytes代 码 描 述 文 件 大 小 ( 阈 值 )405 Method Not Allowed 256 bytes406 N

10、ot Acceptable 512 bytes408 Request Time-out 512 bytes409 Conflict 512 bytes410 Gone 256 bytes500 Internal Server Error 512 bytes501 Not Implemented 512 bytes505 HTTP Version Not Supported 512 bytes当然上面那张表不是空穴来风,是根据 IE 配置来的,这个配置保存在注册表HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerMainErrorThresholds,你可以根据需要编辑修改这个值:刚才看到 Nginx 的默认错误页,比如 404 错误,也应用了相应的技巧来避免这个问题:不过看字面意思,貌似 Chrome 也有这种特性?而且试了一下,貌似只有 IE 或者Chrome 访问才会有这么几行 HTML 注释 Padding。另外某些浏览器外壳,可能会捕获相应的 HTTP 错误头,以便于显示其内置的页面,如果这样的话,这里的技巧就不起作用了,还是建议大家使用主流浏览器。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号