2012-07-20 101 views
0

形成這個問題(ETag vs Header Expires)我明白我需要兩個Expire頭和eTag頭,因爲他們有兩個不同的目的。由於我正在研究一個Wordpress插件,我不知道服務器將如何配置,所以我想知道如何檢查eTags是否開啓。 我可以做如何知道eTags是否在PHP中的服務器上打開或關閉?

header('Content-Type: text/css'); 

// Aggressive caching to save future requests from the same client. 
$etag = '"' . md5(__FILE__ . $_GET['my-css-var']) . '"'; 

header('ETag: ' . $etag); 
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 31536000) . ' GMT'); 
header('Cache-Control: public, max-age=31536000'); 

if (empty($_SERVER['HTTP_IF_NONE_MATCH']) || $etag != stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])) { 
// return the CSS 
} else { 
    // Not modified! 
    status_header(304); 
} 

這將與Etag的上工作都關閉和ETag或者ETag的是關閉會導致一些錯誤?

+0

我認爲最好的選擇是發送'ETag'頭,即使服務器不支持它們。它不會失敗。 – Florent 2012-07-20 16:25:10

回答

1

Web服務器不需要啓用電子標籤處理以使自定義標題正常工作。它仍然會被髮送給客戶。

如果您的服務器關閉了Etags,則Web服務器將不會爲靜態文件生成Etags,即.jpg,.css,.js。

在Apache中,你可以用下面的配置取消設置ETag時:

<IfModule mod_headers.c> 
    Header unset ETag 
</IfModule> 

FileETag None 

由於這是具體的Apache和其他Web服務器有不同的語法,它是一個困難的事情在你的腳本來檢查。但是,如果它被設置,它將刪除您的自定義設置Etag。

雖然這不是Apache的默認設置。

要回答你的問題,你不能檢查Etags是否開啓。但爲了您的目的,我不會擔心。

相關問題