新聞中心

您是否在WordPress網(wǎng)站上的Pingdom、GTmetrix或Google PageSpeed Insights中看到“指定緩存驗(yàn)證器(Specify a Cache Validator)”警告?這是因?yàn)槿鄙貶TTP緩存標(biāo)頭,這些標(biāo)頭應(yīng)該包含在每個(gè)源服務(wù)器響應(yīng)中,因?yàn)樗鼈兌?strong>驗(yàn)證并設(shè)置了緩存的長(zhǎng)度。如果沒有找到標(biāo)頭,它每次都會(huì)為資源生成一個(gè)新的請(qǐng)求,這會(huì)增加服務(wù)器的負(fù)載。 使用緩存標(biāo)頭可確保 不必從服務(wù)器加載后續(xù)請(qǐng)求,從而為用戶節(jié)省帶寬并提高性能。
指定緩存驗(yàn)證器警告
Pingdom的警告指出:
以下資源缺少緩存驗(yàn)證器。未指定緩存驗(yàn)證器的資源無法有效刷新。指定Last-Modified或ETag標(biāo)頭以啟用以下資源的緩存驗(yàn)證。
按照有關(guān)如何解決“指定緩存驗(yàn)證”的警告下面的步驟。
修復(fù)“指定緩存驗(yàn)證器”警告
關(guān)于此警告需要注意的第一件事是,您只能針對(duì)服務(wù)器上的請(qǐng)求修復(fù)此問題。如果您有3rd方請(qǐng)求,您會(huì)看到此內(nèi)容,則您無能為力,因?yàn)槟鸁o法控制他們的Web服務(wù)器。盡管隨時(shí)與他們分享這篇文章。請(qǐng)記住,使用Pingdom,您可能需要多次運(yùn)行測(cè)試??赡苁堑谝淮纬霈F(xiàn)警告,第二次消失。當(dāng)您第一次運(yùn)行該工具時(shí),它會(huì)從服務(wù)器啟動(dòng)資產(chǎn)的緩存。
有四種不同類型的標(biāo)題可以以不同的方式用于修復(fù)此警告。這可能會(huì)讓人有點(diǎn)困惑,但我們將嘗試盡可能簡(jiǎn)單地解釋它。
驗(yàn)證緩存的標(biāo)頭
前兩個(gè)標(biāo)頭是last-modified和ETag。這些標(biāo)頭可幫助瀏覽器確定自上次請(qǐng)求以來該文件是否已更改?;蛘吒_切地說,他們驗(yàn)證緩存。
1. 上次修改
最后修改標(biāo)頭通常自動(dòng)從服務(wù)器發(fā)送。這是一個(gè)您通常不需要手動(dòng)添加的標(biāo)題。發(fā)送它是為了查看自上次請(qǐng)求以來瀏覽器緩存中的文件是否已被修改。您可以在Pingdom中查看header請(qǐng)求或使用Chrome DevTools查看最后修改的header的值。
最后修改的標(biāo)題
2. ETag
ETag的頭也很類似Last-Modified頭。它還用于驗(yàn)證文件的緩存。如果您運(yùn)行的是Apache 2.4或更高版本,則ETag標(biāo)頭已使用FileETag指令自動(dòng)添加。就NGINX而言,自2016年以來,ETag標(biāo)頭默認(rèn)啟用。
ETag標(biāo)頭
您可以使用以下代碼在NGINX中手動(dòng)啟用ETag標(biāo)頭。
etag on
決定緩存長(zhǎng)度的標(biāo)頭
接下來的兩個(gè)標(biāo)頭是Cache-Control和Expires。這些標(biāo)頭有助于確定文件在從服務(wù)器獲取新副本之前應(yīng)在緩存中保留多長(zhǎng)時(shí)間。請(qǐng)記住,要修復(fù)您在Pingdom或GTmetrix中看到的警告,您需要確保您有一個(gè)既可以驗(yàn)證緩存又可以確定緩存長(zhǎng)度的標(biāo)頭。
3. 緩存控制
Cache-Control是由不同指令組成的標(biāo)頭,允許您定義緩存的長(zhǎng)度。一些最常見的指令包括:
- max-age:定義文件應(yīng)該被緩存的時(shí)間。
- public: 允許任何緩存公開存儲(chǔ)響應(yīng)。
- private:只能通過瀏覽器訪問文件緩存。
緩存控制頭
在上面的示例中,我們可以看到資產(chǎn)正在使用max-age指令。604800秒等于7天的緩存。要在Apache中進(jìn)行配置,只需將以下代碼添加到您的 .htaccess 文件中。
Header set Cache-Control "max-age=604800, public"
要在NGINX中配置它,只需將以下代碼添加到您的配置文件中。所有NGINX配置文件都位于該/etc/nginx/目錄中。主要配置文件是/etc/nginx/nginx.conf.
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
add_header Cache-Control "public";
}
要了解有關(guān)不同指令的更多信息,請(qǐng)查看這篇關(guān)于Cache-Control的深入文章 。
4. 過期
最后你有expires標(biāo)頭。根據(jù)這篇Google Developers文章,HTTP Caching : Cache-Control標(biāo)頭被定義為HTTP/1.1規(guī)范的一部分,并取代了以前用于定義響應(yīng)緩存策略的標(biāo)頭(在本例中為Expires標(biāo)頭)。所有現(xiàn)代瀏覽器都支持Cache-Control,因此這就是您所需要的。但是,如果您同時(shí)擁有兩者,則不會(huì)有任何傷害,但請(qǐng)記住,只會(huì)使用一個(gè)。Expires標(biāo)頭使用實(shí)際日期,而Cache-Control標(biāo)頭允許您指定到期前的時(shí)間量。
過期標(biāo)題
要在Apache中添加Expires標(biāo)頭,只需將以下代碼添加到您的 .htaccess文件中。
## EXPIRES HEADER CACHING ##ExpiresActive On ExpiresByType image/jpg "access 1 year" ExpiresByType image/jpeg "access 1 year" ExpiresByType image/gif "access 1 year" ExpiresByType image/png "access 1 year" ExpiresByType text/css "access 1 month" ExpiresByType application/pdf "access 1 month" ExpiresByType application/javascript "access 1 month" ExpiresByType application/x-javascript "access 1 month" ExpiresByType application/x-shockwave-flash "access 1 month" ExpiresByType image/x-icon "access 1 year" ExpiresDefault "access 7 days" ## EXPIRES HEADER CACHING ##
確保在諸如mod_rewrite、GZIP等內(nèi)容下方添加Expires標(biāo)頭塊。在文件底部是最安全的。
在.htaccess中添加過期標(biāo)頭
要在NGINX中添加Expires標(biāo)頭,只需將以下代碼添加到您的配置文件中。
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 7d;
}
在NGINX上的很多情況下,Cache-Control標(biāo)頭和Expires標(biāo)頭只是一起使用,即使這在技術(shù)上不是必需的:
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 7d;
add_header Cache-Control "public";
}
大多數(shù)3rd方CDN提供商,例如KeyCDN和Cloudflare,也會(huì)在交付您的資產(chǎn)時(shí)自動(dòng)添加這些標(biāo)頭。如果您看到警告,則可能是您的主機(jī)運(yùn)行的軟件過時(shí)或服務(wù)器配置錯(cuò)誤。我們通常在共享主機(jī)上看到這種情況?;蛘?,您可能正在設(shè)置自己的服務(wù)器,在這種情況下,可能尚未添加上述某些標(biāo)頭。
如果一切順利,并且您沒有任何未正確使用標(biāo)頭的3rd方請(qǐng)求,您應(yīng)該會(huì)使用Pingdom等網(wǎng)站速度測(cè)試工具(如下所示)看到您的分?jǐn)?shù)有所提高。
修復(fù)了指定緩存驗(yàn)證器警告
當(dāng)前名稱:如何修復(fù)網(wǎng)站測(cè)速中的“指定緩存驗(yàn)證器”警告問題
文章出自:http://fisionsoft.com.cn/article/dheodso.html


咨詢
建站咨詢
