我注意到一些大牌网站在同一页面加载时提供压缩的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示例。
答案 0 :(得分:5)
最初我认为它与旧的浏览器支持有关,因为IE6和Netscape4在处理压缩的js文件时确实存在错误。但这与HTTPS无关。这是压缩本身,服务器配置文件长期有条件设置,如果检测到较旧的浏览器,则不压缩js文件。
经过一些谷歌搜索后,事实证明问题不在于js。它是使用HTTPS。 您不应通过HTTPS / SPDY / HTTP2 提供gzip压缩内容。通过HTTPS提供gzip压缩内容时,可能会发生两种攻击:CRIME和BREACH。
CRIME和BREACH攻击都利用了这样一个事实:gzipping数据以统计上可预测的方式减小了它们的大小。这两种攻击都能够提取cookie,这取决于您的网站的工作方式,允许攻击者登录用户帐户。
因此,根据您的观察,我们可以得出结论,谷歌CDN配置正确。
然而,请注意两种攻击是如何工作的:它们的最终目标是会话劫持。如果您从Microsoft服务器下载js / css / gif文件,那么您的浏览器将无法发送您网站的Cookie以及请求(同源策略)。因此,微软可以原谅在HTTPS上提供压缩的js文件。
这意味着您可以通过HTTPS提供压缩文件!您只需要确保这些文件来自不同的域,以防止CRIME和BREACH攻击窃取您的cookie。