JavaScript能否检测用户的浏览器是否支持gzip?

11

我能否使用JavaScript检测用户的浏览器是否支持gzipped内容(客户端,不是node.js或类似技术)?

我试图支持以下边缘情况:
在特定的 Web 应用程序中可以加载许多可能的文件,最好根据应用程序运行需要按需加载它们,而不是最初加载它们。我想通过 S3 提供这些文件,并设置远期缓存过期日期。由于S3不支持将文件压缩为客户端支持的gzip格式,因此我想为每个文件提供两个版本--一个正常版本和一个gzipped版本,content-type设置为application/gzip。当然,浏览器需要知道请求哪些文件。如果JavaScript能够检测浏览器是否支持gzipped内容,则浏览器将能够请求正确的文件。

这可行吗?


你为什么要使用S3进行文件传递?你应该使用CloudFront,它可以... - Layke
2个回答

17

Javascript无法实现此功能,但您可以使用Javascript来检测浏览器是否支持gzip内容。

我上面已经发表了评论,并想重申一下,您应该使用CloudFront,它可以压缩内容。如果您正在使用S3,则没有理由不使用CloudFront,但是,为了回答您的问题...

这篇博客文章完美地解决了如何检测浏览器是否支持Gzip的问题。

http://blog.kenweiner.com/2009/08/serving-gzipped-javascript-files-from.html

这里是一个快速总结:

1) Create a small gzipped file, gzipcheck.js.jgz, and make it available in CloudFront. This file should contain one line of code:

gzipEnabled = true;

2) Use the following code to attempt to load and run this file. You'll probably want to put it in the HTML HEAD section before any other Javascript code.

<script type="text/javascript" src="gzipcheck.js.jgz">
</script>

If the file loads, it sets a flag, gzipEnabled, that indicates whether or not the browser supports gzip.


4
好的,那我开始翻译了:+1 这是个好技巧,但 CloudFront 不支持 gzip 压缩内容。只有在源服务器提供了 gzip 压缩的内容,CloudFront 才会提供 gzip 压缩的内容。 - Paul
2
这是CloudFront使用gzipped内容的说明 - 它们不会自动提供gzipped内容,如果您正在使用S3,则需要在客户端生成gzipped版本的URL。http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html - banjomonster

4

Cloudfront不会自动压缩内容。在Amazon决定在S3和Cloudfront中进行自动gzip压缩之前,人们必须使用以下解决方法。

  • 除了普通版本外,在S3上创建一个已经gzipped的文件版本并上传。如果文件名为style.css,则gzipped版本应命名为style.css.gz。
  • 为文件添加一个键为Content-Encoding、值为gzip的头文件。这是必需的,以便浏览器理解该内容使用gzip编码。可以使用S3 API或流行的S3文件管理器工具(如Cloudberry、Bucket Explorer等)添加标题。
  • 还要添加正确的Content-Type文件头。例如对于style.css,它应该是Content-Type:text / css。
  • 在网页中正常包含该文件。
  • 使用上述javascript检测浏览器是否支持gzip编码。如果检测到支持,则将文件名(例如style.css)替换为style.css.gz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接