为什么我的浏览器尝试从 http://clhs.lisp.se 下载页面而不是正常查看它们?

Sod*_*hty 28 browser html compatibility http

这个问题几周前就开始了。

每当我导航到任何页面时http://clhs.lisp.se- 例如这个:http://clhs.lisp.se/Body/m_w_open.htm- 我的浏览器不会正常显示该页面,而是尝试将该页面下载为 HTML 文件。

这发生在 Chrome、Firefox、Brave、Vivaldi 和 Opera 中;但不在 Internet Explorer 或 Edge 中。它曾经在所有浏览器中都能正常工作。

为什么会发生,我怎样才能让它正常工作?使用 IE 或 Edge 不是一种选择。

Gia*_*968 53

网站和/或网络服务器提供网页的方式有问题。

这不是您的问题,而是服务器端的一些奇怪问题;与网站本身或服务器提供 Web 内容。

而不是交付带有标头的内容,表明text/html它正在交付application/octet-streamWeb 浏览器将其解释为二进制数据的内容,然后应将其作为文件下载进行处理。看看这个 Curl 命令的输出:

curl -ILk http://clhs.lisp.se/Body/m_w_open.htm
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Accept-Ranges: bytes
Content-Length: 8896
Date: Sat, 21 Sep 2019 18:41:10 GMT
Server: lighttpd/1.4.45
Run Code Online (Sandbox Code Playgroud)

我很确定你不能在客户端解决这个问题,除非有某种插件 - 例如对于 Firefox 或 Chrome - 这将允许你为我们这样的请求强制特定标头。

也就是说,该站点的核心内容可以在 Internet 上其他位置正确配置并按预期工作的站点上找到。

在那之后,如果您只是想阅读该站点上的内容——而不是调试该站点本身的问题——您可以根据dave_thompson_085 对问题的评论在以下其他站点访问相同的内容:

根据戴夫的评论,麻省理工学院的第二个链接应该是权威的,因为“恕我直言,正确的家;肯特在那里工作时,我就认识他。”

  • @SodAlmighty 事实上,在 2019 年微软浏览器以某种方式允许二进制标头显示为 HTML 应该让你担心。虽然您对在其他浏览器上的这种不便感到不安,但现实是网站和/或服务器以某种方式损坏。这可能是一个诚实的错误,它可能是网站本身被黑客入侵的迹象,也是恶意软件的潜在载体。无视最基本的 Web 标准的 Microsoft 产品不应被视为以任何方式发布。 (37认同)
  • @ComFreek 想象一个论坛,它允许人们上传任意文件,其他人可以下载它们。他们可能决定只通过“安全”的内容类型(例如图像)为它们提供服务,并将其他所有内容作为 *application/octet-stream* 提供,因此行为良好的浏览器只需下载它们。然而,Edge 和 IE 显然会将这些文件视为 HTML 文件并执行内联 JavaScript。如果在 IE/Edge 中没有实施额外的限制,这是一个导致 XSS 的明显安全漏洞。 (25认同)
  • @SodAlmighty,IE 和 Edge 可以很好地工作这一事实是为什么 IE 和 Edge 如此容易被攻击者破解的一个症状:浏览器试图猜测什么行为将为用户提供最佳体验,并且有人理解所使用的逻辑可能会诱使浏览器做出错误的决定。 (22认同)
  • @SodAlmighty - 与管理网站的人联系并告知他们问题。没有什么是你可以做的。IE 和 Edge 工作的事实是侥幸。 (15认同)
  • 另请参阅 IE 引入的 [X-Content-Type-Options: nosniff](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options) 标头以缓解他们引入的安全风险。 (5认同)
  • @ComFreek 应该通过使用内容处置来始终下载文件而不是显示文件来处理这种特殊情况。application/octet-stream 不是 content-disposition 的替代品,不应作为一种替代品使用。 (4认同)
  • @JakeGould IE 和 Edge 的行为如何构成安全风险?我可以看到这可能如何违反标准,但您的评论读起来好像涉及安全风险。 (3认同)
  • @JakeGould 是的,这是一件多么可怕的事情,多么幸运,除了 Safari、Firefox 和 Chrome 之外,没有其他浏览器在类似情况下做同样的事情(毕竟这些都是启发式方法,所以你不会期望它们在所有情况下都能工作)。真的是人们讨厌微软的一个很好的例子。 (3认同)
  • @Mark 公平地说,Firefox 和 Chrome 也进行 MIME 类型的嗅探。例如,在 ['nosniff' 和浏览器中 MIME 嗅探的兔子洞](https://medium.com/@ethicalevil/nosniff-and-the-rabbit-hole-of-mime-sniffing- in-browsers-9f764a454a46) 和 Firefox [在 Firefox 中缓解 MIME 混淆攻击](https://blog.mozilla.org/security/2016/08/26/mitigating-mime-confusion-attacks-in-firefox/)。 (2认同)

har*_*ymc 10

这个有趣的网站为您的页面返回一个带有以下标题的答案:

HTTP/1.1 200 OK
Content-Type: application/octet-stream
Accept-Ranges: bytes
Content-Length: 8896
Date: Sat, 21 Sep 2019 18:44:55 GMT
Server: lighttpd/1.4.45
Run Code Online (Sandbox Code Playgroud)

这里的问题是 Content-Type 字段,描述为:

应用

一些其他类型的数据,通常是未解释的二进制数据或要由基于邮件的应用程序处理的信息。主要子类型“八位字节流”将用于未解释的二进制数据的情况,在这种情况下,最简单的推荐操作是为用户提供将信息写入文件。

浏览器无法显示二进制文件。由于“application/octet-stream”的 Content-Type 值将返回答案定义为二进制文件,因此遵守该标准的浏览器除了下载文件之外别无其他可能的操作。

IE 和 Edge 从来都不擅长遵循标准,这就是微软目前放弃两者的原因。


小智 8

你可以试试ModHeader。安装后,您访问站点的根目录,单击扩展图标,然后单击加号、响应标题并键入Content-Type. 愉快地浏览那个网站。

您可以在扩展中使用配置文件,仅在需要时进行切换。如果您创建没有任何规则的配置文件,该图标将显示为非活动状态,这将是 Internet 其余部分的配置文件。

我测试了它并且它可以工作,但是要小心,我看不到源代码,要修改标题,您需要对所有页面具有完全权限。您还可以根据需要从 Firefox 插件管理器启用/禁用它。更多信息可以在这里找到