我正在尝试在图像上设置一个 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,它是在每次加载时第一次设置的,而不仅仅是在重新加载时?