JavaScript什么时候不应该被gzip压缩?

时间:2016-01-27 01:04:59

标签: javascript gzip

我注意到一些大牌网站在同一页面加载时提供压缩的JavaScript和一些未压缩的JavaScript。

我还read,在通过https提供时,不应该对JavaScript进行gzip压缩。为了支持这一点,我注意到,当从谷歌的CDN提供jQuery时,他们只通过HTTP压缩而不是来自HTTPS。

e.g。第一个是压缩的;第二个不是。

http://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"
https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"

但是,如果您通过https从Microsoft CDN中提取jQuery:

https://ajax.aspnetcdn.com/ajax/jquery.mobile/1.3.2/jquery.mobile-1.3.2.min.js

它被压缩了。

在同一页面加载时同时提供压缩和未压缩的大型网站示例,无论是否为HTTPS:

所以我的问题是:我什么时候应该gzip我的JavaScript,什么时候不应该?

注意,Can you use gzip over SSL? And Connection: Keep-Alive headers的问题有点类似,因为那里的答案解释了在什么情况下不应该在HTTPS下使用压缩。然而,这只是我的一半问题 - 一些HTTP(而非HTTPS)网站也会压缩一些但不是全部的javascript资源,例如:上面提到的Stackoverflow示例。

1 个答案:

答案 0 :(得分:5)

最初我认为它与旧的浏览器支持有关,因为IE6和Netscape4在处理压缩的js文件时确实存在错误。但这与HTTPS无关。这是压缩本身,服务器配置文件长期有条件设置,如果检测到较旧的浏览器,则不压缩js文件。

经过一些谷歌搜索后,事实证明问题不在于js。它是使用HTTPS。 您不应通过HTTPS / SPDY / HTTP2 提供gzip压缩内容。通过HTTPS提供gzip压缩内容时,可能会发生两种攻击:CRIMEBREACH

CRIME和BREACH攻击都利用了这样一个事实:gzipping数据以统计上可预测的方式减小了它们的大小。这两种攻击都能够提取cookie,这取决于您的网站的工作方式,允许攻击者登录用户帐户。

因此,根据您的观察,我们可以得出结论,谷歌CDN配置正确。

然而,请注意两种攻击是如何工作的:它们的最终目标是会话劫持。如果您从Microsoft服务器下载js / css / gif文件,那么您的浏览器将无法发送您网站的Cookie以及请求(同源策略)。因此,微软可以原谅在HTTPS上提供压缩的js文件。

这意味着您可以通过HTTPS提供压缩文件!您只需要确保这些文件来自不同的域,以防止CRIME和BREACH攻击窃取您的cookie。