【问题标题】:Serving gzipped content directly — bad thing to do?直接提供 gzip 压缩的内容 - 做坏事?
【发布时间】:2012-07-24 02:33:17
【问题描述】:

我将我的网站配置为使用 gzip 压缩提供静态内容,如下所示:

<link rel='stylesheet' href='http://cdn-domain.com/css/style.css.gzip?ver=0.9' type='text/css' media='all' />

我没有看到任何网站做类似的事情。所以,问题是,这有什么问题?我可以期待缺点吗?

确切地说,据我了解,大多数网站都配置为仅在请求附带时才提供普通静态文件(.css、.js 等)和压缩内容(.css.gz、.js.gz 等) Accept-Encoding: gzip 标头。当所有浏览器都支持gzip 时,他们为什么要这样做?

PS:我根本没有看到任何性能问题,因为所有静态内容在上传到 CDN 之前都经过 gzip 压缩,然后 CDN 只是提供 gzip 压缩文件。因此,我的服务器上没有压力/紧张。


以防万一,这是 gzip 压缩的 CSS 文件的 HTTP 响应标头信息:

这适用于压缩后的 favicon.ico 文件:

【问题讨论】:

  • PS: Possible duplicate,我知道——但这个问题已经存在多年了,基于 浏览器支持 的答案不再相关,恕我直言。
  • 为什么它们不再相关?我仍然坚持我的回答:所有现代浏览器都支持以 gzip 格式接收内容以进行传输。在服务器端如何预处理/处理内容是无关紧要的。你在这里做了一些聪明的事情,但这并不是一个真正的新问题。只要您的服务器仍然发送正确的标头,尽管它已被预处理,您将完全没问题。即使您没有发送所有正确的标头,浏览器甚至可以在这些天为您节省开支。
  • 作为参考,许多网站确实这样做了,但大多数不会保留.gzip 后缀(技术上应该只有.gz)。
  • @MatthewScharley 问题是,我认为问题不仅仅是浏览器,我认为它没有被广泛采用的原因(我不知道究竟是什么,它可能是)。是的,今天所有的浏览器都非常非常好地支持 gzip。因此,在浏览器端或移动设备上都没有问题。 PS 用一些信息更新了我的问题。
  • 亚马逊退货的一切都很好,所以你应该是对的。我想不出任何设备不支持Content-Encoding: gzip 的任何原因,这是当今非常 高度使用的机制。正如我已经提到的,为 gzip 压缩预处理文件并不是一个新想法(尤其是 svgz),但大多数主机将被设置为透明地处理它,而不像您使用的那样依赖文件名后缀。你真的有问题吗?如果是这样,你能强调一下吗?目前我完全错过了你的问题。

标签: gzip static-content


【解决方案1】:

支持Content-Encoding: gzip 不是任何当前HTTP 规范的要求,这就是为什么会有请求头形式的触发器。

在实践中?如果您的受众正在使用 Web 浏览器,而您只担心合法用户,那么只有经过预处理的 gzip 压缩版本可用,任何人实际上都会受到影响的可能性非常非常小。这是一个过去时代的残余。这些天的浏览器应该处理强制输入的 gzip 压缩内容,即使他们不请求它,只要您还为他们提供正确的标题来提供给他们的内容。重要的是要意识到 HTTP 请求/响应是一个对话,并且请求中的大多数标头就是这样; 请求。在大多数情况下,另一端的服务器没有义务尊重任何特定的标头,只要它们返回有意义的有效响应,另一端的客户端就应该尽最大努力理解返回的内容.这包括在服务器响应它已使用 gzip 时启用 gzip。

但是,如果您的目标是机器消耗,那么请注意一点。人们仍然认为有时编写自己的 HTTP/SMTP/etc 解析器是一个聪明的主意,尽管该主题已经在多个库中为几乎所有语言完成了死亡。所有的库都应该支持 gzip,但手动解析器通常不支持。

【讨论】:

  • machine consumptionhand-rolled "parsers" 到底是什么意思?你能举个例子吗?顺便说一句,我的是一个博客。
  • @AahanKrish:机器消耗:任何不直接显示给用户的东西。屏幕抓取工具等或功能类似于 REST API 的东西。解析是用于描述获取一些复杂元素(在这种情况下,例如 CSS 或 HTML 文件或 HTTP 会话)并将其转换为计算机可以直接理解的数据结构或结构的术语。 “手卷”是指开发人员自己创建的代码,即。不是图书馆。
  • @AahanKrish:另外,请参阅我对第二段的编辑,稍微扩展一下为什么这对你有用 :)
  • 机器消费的其他示例包括 RSS 提要阅读器、搜索引擎、各种机器人和爬虫(例如 HTML 验证器、网络档案)等。其中“手工制作”的越多,就越不太可能接受 gzip 压缩的内容。例如,您应该可以使用搜索引擎。但是,如果您希望 joe blogg 的迷你 RSS 阅读器支持它,在您的 RSS 提要上使用它可能会很困难。