26

我想显示一个自定义错误页面:

<!doctype html>
<html>
<head><title>400 Bad Request</title></head>
<body><h1>400 Bad Request</h1>
The grob must be in the frobber.
</body>
</html>

不幸的是,Internet Explorer 忽略了 HTTP 服务器发送的响应;隐藏我的页面并显示他们自己的:

通用的

如何说服 Internet Explorer 显示发送给用户的页面?

编辑Chrome 从2008 年开始做同样的事情。人们要求修复它;但它被标记为不会修复

您可以在答案中使用相同的技巧来修复它。

4

1 回答 1

39

解决办法是PADDING。

Microsoft 在知识库文章KB294807中指出:

如何:关闭服务器端的 Internet Explorer 5.x 和 6.x“显示友好的 HTTP 错误消息”功能

...这些“友好”错误消息仅在发送到客户端的响应小于或等于指定阈值时才会显示。例如,要查看 HTTP 500 响应的确切文本,内容长度必须大于 512 字节。

实现这个填充。为此,请使用 VBScript 字符串函数返回相同字符的字符串,该字符串比 Internet Explorer 5.x 用于显示友好错误消息的 ErrorThreshold 多一个。例如,在 500-100.asp 的标记之前添加以下行:

 <% Response.Write String(513, "_") %>

让它更大

所以我将响应页面扩大到:

<!doctype html>
<html>
<head><title>400 Bad Request</title></head>
<body><h1>400 Bad Request</h1>
The grob must be in the frobber.

<!--       
    512 bytes of padding to suppress Internet Explorer's "Friendly error messages"

    From: HOW TO: Turn Off the Internet Explorer 5.x and 6.x "Show Friendly HTTP Error Messages" Feature on the Server Side
          http://support.microsoft.com/kb/294807

    Several frequently-seen status codes have "friendly" error messages 
    that Internet Explorer 5.x displays and that effectively mask the 
    actual text message that the server sends.
    However, these \"friendly\" error messages are only displayed if the 
    response that is sent to the client is less than or equal to a 
    specified threshold.
    For example, to see the exact text of an HTTP 500 response, 
    the content length must be greater than 512 bytes.
  -->
</body>
</html>

问题解决了。

奖金阅读

是什么让 IE 决定显示友好的错误页面?

答案是服务器的响应必须满足两个条件:

  • HTTP 状态码必须为[400, 403, 404, 405, 406, 408, 409, 410, 500, 501, 505]
  • HTTP 响应正文的字节长度必须小于阈值

字节长度阈值存储在注册表中 HKEY_LOCAL_MACHINE 的子项 \SOFTWARE\Microsoft\Internet Explorer\Main\ErrorThresholds 下。

  • [403、405、410]: 256 字节
  • [400、404、406、408、409、500、501、505]: 512字节
  • 否则:512 字节
于 2012-07-18T14:44:11.510 回答