2011-08-22 159 views
9

我可以使用JavaScript来检测用户的浏览器是否支持gzip内容(客户端,而不是node.js或类似的)?JavaScript可以检测用户的浏览器是否支持gzip?

我想支持以下边缘情况:
有很多的,可以在一个特定的web应用程序加载,这将是更好地加载它们作为必要的,因为应用需求可能文件运行,而不是负担他们最初。我希望将这些文件从S3缓存到远期缓存到期日期。由于S3 does not support gzipping files to clients that support it,我想主持每个文件的两个版本 - 一个正常,一个gzipped与content-type设置为application/gzip。浏览器当然需要知道要请求的文件。如果JavaScript能够检测到浏览器是否支持gzip内容,那么浏览器将能够请求正确的文件。

这可能吗?

+0

为什么摹的style.css您使用S3的文件传输。你应该使用CLoudFront ..哪一个。 – Layke

回答

15

Javascript不能,但您可以使用Javascript来检测是否浏览器支持gzipped内容。

我上面评论过,只是想重新调整一下,不管怎样,您都应该使用CloudFront,它会执行gzip内容。如果您使用的是S3,那么您为什么不想使用CloudFront是没有理由的,但是,为了回答您的问题......

此博客文章完美地说明了如果浏览器支持Gzip 。

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

这里是一个快速摘要:

1)创建一个小的gzip压缩文件,gzipcheck.js.jgz,并使其在CloudFront的使用。此文件应包含一行代码:

gzipEnabled = true; 

2)使用以下代码尝试加载并运行此文件。您可能希望在任何其他Javascript代码之前将其放在HTML HEAD部分。

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

如果文件加载,它会设置一个标志gzipEnabled,指示浏览器是否支持gzip。

+4

+1这是一个很好的窍门,但CloudFront不会gzip内容。它只会在来源提供经过压缩的内容时才会提供经过压缩的内容。 – Paulpro

+2

这里是CloudFront关于使用gzip内容的说明 - 并且它们不会自动提供gzip内容,如果您使用的是S3,则gzip版本的URL需要在客户端生成。 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html – banjomonster

4

那么cloudfront不自动gzip内容。直到亚马逊决定在S3和Cloudfront中执行自动gzip压缩时,人们必须使用下面的解决方法。

  • 除了正常版本之外,还可以在S3上创建gzip版本的文件并上传。如果文件名是style.css,则gzip版本应该命名为style.css.gz。
  • 向文件添加一个头文件,key = Content-Encoding & value = gzip到文件。这是需要的,以便浏览器了解使用gzip编码的内容。头文件可以使用S3 api或者像Cloudberry,Bucket Explorer等流行的S3文件管理器工具来添加。
  • 也为文件添加正确的Content-Type标头。例如style.css,它应该是Content-Type:text/css。
  • 在网页中包含的文件通常是
  • 使用上面提到的javascript来检测浏览器是否支持gzip编码。如果找到真正的替换文件名e。与style.css.gz
相关问题