2012-07-20 106 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是否开启。但为了您的目的,我不会担心。

相关问题