我正在尝试改进我的pagespeed。我已经安装了nginx并将我的网站更改为http2。但是在gtmetrix性能报告中我的css,png和js文件没有到期日期。 Leverage浏览器缓存建议中的(未指定过期)。我想我已经设定了所有可能的方法来尝试不同的变种。
如果他们是我的nginx指令和htaccess文件的另一项改进,请随时发布。
Plesk中的nginx成瘾指令
autocomplete.js
htaccess的文件
gzip on;
gzip_vary on;
gzip_min_length 1240;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\\.(?!.*SV1)";
gzip_proxied any;
gzip_types text/plain text/css text/javascript application/javascript application/x-javascript application/json text/xml application/xml application/xml+rss image/x-icon image/bmp image/svg+xml;
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 1y;
log_not_found off;
}
答案 0 :(得分:0)
您需要检查并设置Etag标头以优化页面加载。
当我们设置浏览器缓存时,我们应该保留一个主要规则: "如果文件曾被浏览器加载过, 如果此文件没有更改,浏览器不应再次加载此文件。"浏览器应该从缓存中获取此文件。 在每次重新加载页面时,浏览器应该检查,哪个文件在服务器上被修改,哪个没有。 出于HTTP协议的目的,我们有 ETag 标头,浏览器在第一个文件请求中从服务器接收 并且在下一个请求中,浏览器将发送该标头的值作为标头的值If-None-Match或If-non-modified-since。 浏览器和服务器之间的这种通信将如下所示:
First request:
GET /file.css HTTP/1.1
Host: example.com\r\n\r\n
First response:
HTTP/1.1 200 OK
Content-Type: text/css; charset=UTF-8
Cache-Control: public, must-revalidate
ETag:W/"51f2d-dEW1Z5fvR5lLvYGJeS4DTZdaxAs"
--There is content of file--
Second request:
GET /file.css HTTP/1.1
If-None-Match:W/"51f2d-dEW1Z5fvR5lLvYGJeS4DTZdaxAs"
Host: example.com\r\n\r\n
Second response:
HTTP/1.1 304 Not Modified
--There is no content--
请注意:
ETag的:W /" 51f2d-dEW1Z5fvR5lLvYGJeS4DTZdaxAs"在第一次回复中
和
如果无 - 匹配度:W /" 51f2d-dEW1Z5fvR5lLvYGJeS4DTZdaxAs"
第二次请求中的
在这种情况下,当我们收到" 304 Not Modified"浏览器将从缓存中提取此文件 这个文件将有无尽的过期。如果文件将被更改,则Etag值将被更改 浏览器将从服务器重新加载此文件并更新其缓存。 即使你使用php或其他东西进行动态内容渲染,nginx也会计算Etag的值 在呈现内容并在向浏览器发送响应之前检查之后;
对于加载优化,您需要在服务器中设置Etag标头。 这个方法:
ExpiresByType image/jpg "access plus 14 days"
文件缓存不正确。 您只能将其用于主html请求。 因为Expiration标头对谷歌等搜索引擎很有用。 它告诉他们何时需要重新索引您的页面。 如何设置Etag,您可以看到here。