我如何知道在PHP中服务器上是否打开或关闭eTag?

时间:2012-07-20 15:58:46

标签: php http-headers http-etag

形成这个问题(ETag vs Header Expires)我明白我需要Expire标题和eTag标题,因为它们有两个不同的用途。由于我正在使用Wordpress插件,我不知道服务器将如何配置,所以我想知道如何检查eTag是否打开。 我能做到

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 off和Etag都有效,或者会导致一些错误?

1 个答案:

答案 0 :(得分:1)

Web服务器无需启用Etag处理即可使自定义标头正常工作。它仍将发送给客户。

如果您的服务器关闭了Etags,则Web服务器不会为静态文件生成Etags,即.jpg,.css,.js。

在Apache中,您可以使用以下配置取消设置Etags:

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

FileETag None

由于这是针对Apache的,因此其他Web服务器具有不同的语法,因此在脚本中检查是很困难的。但如果已设置,则会删除您的自定义设置Etag。

这在Apache中不是默认的。

要回答你的问题,你不能检查Etags是否开启。但为了你的目的,我不担心。

相关问题