- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我创建了一个托管在 S3 存储桶上的静态网站。我的 Assets 文件(css 和 js 文件)被缩小并使用 gzip 压缩。文件名本身是 file_gz.js
或 file_gz.css
并带有 Content-Encoding: gzip
header 。
到目前为止,我已经在各种浏览器上测试了该网站,它运行良好。 Assets 以其压缩版本交付,页面看起来没有任何不同。
我看到的唯一问题是,因为这是一个 S3 存储桶,所以当客户端(浏览器)不支持 gzip 编码时没有故障保护。相反,HTTP 请求将失败,并且不会对页面应用任何样式或 javascript 增强。
有人知道设置 Content-Encoding: gzip
有什么问题吗?所有浏览器都支持吗?是否需要附加任何其他 header 才能使其正常工作?
最佳答案
现代浏览器几乎全面支持编码内容。但是,假设所有用户代理都会这样做是不安全的。您的实现的问题是它完全忽略了 HTTP 的内置方法来避免这个问题:内容协商。您有几个选择:
您可以继续对问题视而不见,并希望访问您的内容的每个 用户代理能够解码您的 gzip 资源。不幸的是,情况几乎肯定不是这样。浏览器并不是唯一的用户代理,解决问题的“埋头苦干”方法很少是个好主意。
实现一个解决方案来协商您是否使用 Accept-Encoding
header 提供 gzip 压缩响应。如果客户端根本不指定此 header 或指定它但未提及 gzip,则可以相当确定用户将无法解码 gzip 压缩的响应。在这些情况下,您需要发送未压缩的版本。
内容协商的来龙去脉超出了本答案的范围。您需要研究如何解析 Accept-Encoding
header 并协商响应的编码。通常,内容编码是通过使用第三方模块(如 Apache 的 mod_deflate)来完成的。虽然我不熟悉 S3 在这方面的选项,但我怀疑您需要自己实现协商。
总而言之:在未先与客户端清除编码内容的情况下发送编码内容并不是一个好主意。
关于http - Content-Encoding : gzip 需要注意的事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12162273/
我是一名优秀的程序员,十分优秀!