1

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

4

0 回答 0