Google PageSpeed说我应该为JS和CSS“指定一个Vary:Accept-Encoding标头”。我怎么在.htaccess中这样做?
答案 0 :(得分:89)
我想这意味着您为css和js文件启用gzip压缩,因为这将使客户端能够接收gzip编码的内容和普通内容。
这是在apache2中的方法:
<IfModule mod_deflate.c>
#The following line is enough for .js and .css
AddOutputFilter DEFLATE js css
#The following line also enables compression by file content type, for the following list of Content-Type:s
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml
#The following lines are to avoid bugs with some browsers
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>
以下是添加Vary Accept-Encoding
标题的方法:[src]
<IfModule mod_headers.c>
<FilesMatch "\.(js|css|xml|gz)$">
Header append Vary: Accept-Encoding
</FilesMatch>
</IfModule>
Vary:
标头告诉为此网址投放的内容将根据特定请求标头的值而有所不同。在这里,它表示它将为那些说出Accept-Encoding: gzip, deflate
(请求标头)的客户提供不同的内容,而不是提供给不发送此标头的客户端的内容。这个AFAIK的主要优点是让中间缓存代理知道他们需要有相同网址的两个不同版本,因为这样的变化。
答案 1 :(得分:4)
我担心Aularon没有提供足够的步骤来完成这个过程。通过一些试验和错误,我能够在我的专用WHM服务器上成功启用Gzipping。
以下是步骤:
在WHM中运行EasyApache,在Exhaustive Options列表中选择Deflate,然后重建服务器。
完成后,转到服务配置&gt;&gt; Apache配置&gt;&gt;包含编辑器&gt;&gt;发布VirtualHost包含,选择所有版本,然后将mod_headers.c和mod_headers.c代码(在Aularon的帖子中列出)放在输入字段中的另一个上面。
保存后,我看到平均节省了75.36%的数据!您可以使用此HTTP压缩工具运行测试前后测试,以查看您自己的结果:http://www.whatsmyip.org/http_compression/
希望这适合所有人!
答案 2 :(得分:3)
也要压缩你的字体文件!
add "x-font/otf x-font/ttf x-font/eot"
如:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml x-font/otf x-font/ttf x-font/eot
答案 3 :(得分:2)
花了很多时间来澄清那是什么。请阅读this post以获取高级.HTACCESS
代码并了解他们的操作。
您可以使用:
Header append Vary "Accept-Encoding"
#or
Header set Vary "Accept-Encoding"
答案 4 :(得分:1)
这让我很疯狂,但似乎aularon的编辑在"Vary"
之后错过了冒号。因此,将"Vary Accept-Encoding"
更改为"Vary: Accept-Encoding"
可以解决我的问题。
我会在帖子下方发表评论,但似乎不会让我这么做。
无论如何,我希望这可以为我节省同样的麻烦。
答案 5 :(得分:1)
如果有人对NGINX
配置文件有此需要,请点击以下链接:
location ~* \.(js|css|xml|gz)$ {
add_header Vary "Accept-Encoding";
(... other headers or rules ...)
}
答案 6 :(得分:0)
无需指定甚至检查文件是否已压缩, 您可以在每次请求时将其发送到每个文件。
它告诉下游代理如何匹配未来的请求标头来决定 是否可以使用缓存的响应而不是请求新的响应 一个来自原始服务器。
<ifModule mod_headers.c>
Header unset Vary
Header set Vary "Accept-Encoding, X-HTTP-Method-Override, X-Forwarded-For, Remote-Address, X-Real-IP, X-Forwarded-Proto, X-Forwarded-Host, X-Forwarded-Port, X-Forwarded-Server"
</ifModule>
unset
是修复旧GoDaddy托管中的一些错误,可选。