我听说像 CSS 和 JavaScript 这样的静态内容可以更好地以 GZip 格式传递。内容开发者网络 (CDN) 总是这样做。
但是我不明白格式是如何工作的。首先,当我尝试通过命令行制作压缩文件时。文件扩展名为.gz
. 这与.css
和不同.js
。浏览器如何识别哪个文件被 gzip 压缩。
二、浏览器如何“解压”文件?我把我的index.html.gz
拖到我的浏览器上。但是没有人工作。
- 这种 gzip 压缩在现实世界中是如何工作的?
- 如果我想使用 Gzipped 格式提供 CSS/JavaScript,我需要做什么。
您所说的 gzip 压缩对最终用户是不可见的,就此而言,对于作为开发人员的您来说也是如此。它由您的 Web 服务器和客户端的 Web 浏览器负责。
对于 IIS,您需要启用 GZip ISAPI 扩展(在此站点上查看操作方法),对于 Apache,它是 mod_deflate。
当网络浏览器完成了它的请求,但在将它发送到广阔的世界之前,它会对内容进行 gzip 并放入一个特殊的标头,以便浏览器知道内容是压缩的。
当 Web 浏览器收到响应时,它会解压缩数据并读取文件。这对最终用户是完全透明的。
您通常只想对文本文件使用 GZip。在图像上使用它是没有意义的,因为图像已经被严重压缩。
我注意到在所有静态内容(CSS、Javascript 等)上启用 GZip 时,页面大小从 90Kb(加载时间大约 1 秒)下降到大约 5Kb 页面大小(加载时间,0.4 秒)。
如果您使用 Wireshark 查看数据包并重新组装它们,您会发现什么,您会请求
/index.html
,但网络服务器会提取/index.html
、GZip 并将其/index.html.gz
发送出去。是的网络浏览器知道这一点并将其解压缩以使其返回/index.html
,因此当您转到查看源代码时,您会看到/index.html
,而不是/index.html.gz
通常,来自 Web 服务器的静态内容的 Gzip 压缩是通过 Apache mod_deflate 完成的
http://httpd.apache.org/docs/2.0/mod/mod_deflate.html
这通常仅适用于 text/plain、text/html 和 text/xml 格式的文本文件,也可以适用于其他纯文本内容类型(css、js 等),但这可能会导致早期版本的 Internet 出现问题探险家。(编辑:aparrently v6 及以下)
图像应该已经以它们存储的任何格式进行压缩,因此不应该对它们应用额外的(即 mod_deflate)压缩。