我正在尝试在图像上设置ETag以便使用Perl / Mason进行跟踪。
首先创建一个etag.m:
<%init>
warn "Start ETag";
my $request_header = $r->headers_in();
my $etag = $request_header->{'If-None-Match'};
warn "Trace Etag: $request_header->{'If-None-Match'}";
unless ($etag) {
warn "Set Etag";
$r->status(302);
$r->headers_out->{'Location'} = "/images/etag.gif";
$r->headers_out->{'Cache-Control'} = 'public';
$r->headers_out->{'ETag'} = $user->{uid};
my $gmt_mtime = HTTP::Date::time2str(time());
$r->headers_out->{'Last-Modified'} = $gmt_mtime;
}
</%init>
我在另一个文件test_etag.m中使用它:
<img src="etag.m">
在清除缓存后第一次调用test_etag.m时,我可以看到警告,etag为空。每次下一次调用时,都看不到任何警告,所以我认为图像是缓存的。只有当我重新加载F5时,才会找到correkt ETag并显示在警告中。
我怎样才能获得ETag,这是第一次在每次加载时设置,而不仅仅是重载?