我创建了一个托管在 S3 存储桶上的静态网站。我的资源文件(css 和 js 文件)已使用 gzip 缩小和压缩。文件名本身是file_gz.js
or file_gz.css
并交付时带有Content-Encoding: gzip
header.
到目前为止,我已经在各种浏览器上测试了该网站,并且运行良好。资源以压缩版本的形式交付,页面看起来没有任何不同。
我看到的唯一问题是,由于这是一个 S3 存储桶,因此当客户端(浏览器)不支持 gzip 编码时没有故障保护。相反,HTTP 请求将失败,并且不会对页面应用样式或 javascript 增强功能。
有谁知道设置有什么问题Content-Encoding: gzip
?所有浏览器都正确支持吗?我是否需要附加任何其他标头才能使其正常工作?
现代浏览器几乎全面支持编码内容。但是,假设所有用户代理都会这样做并不安全。您的实现的问题在于它完全忽略了 HTTP 的内置方法来避免这个问题:内容协商。您有几个选择:
你可以继续对问题视而不见,并希望every访问您的内容的用户代理将能够解码您的 gzip 资源。不幸的是,几乎可以肯定情况并非如此。浏览器并不是唯一的用户代理,“把头埋在沙子里”解决问题的方法很少是个好主意。
实施一个解决方案来协商是否使用 gzipped 响应Accept-Encoding
标头。如果客户端根本没有指定此标头,或者指定了它但没有提及 gzip,则可以相当确定用户将无法解码 gzip 响应。在这些情况下,您需要发送未压缩的版本。
内容协商的来龙去脉超出了本答案的范围。您需要对如何解析Accept-Encoding
header 并协商响应的编码。通常,内容编码是通过使用第三方模块(例如 Apache 的 mod_deflate)来完成的。虽然我不熟悉 S3 在这方面的选项,但我怀疑您需要自己实施协商。
总之:发送编码内容而不首先与客户端清除它不是一个好主意。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)