3

1.RFC2616のセクション「1.3用語」からの「意味的に透過的な」の定義

意味的に透過的

  A cache behaves in a "semantically transparent" manner, with
  respect to a particular response, when its use affects neither the
  requesting client nor the origin server, except to improve
  performance. When a cache is semantically transparent, the client
  receives exactly the same response (except for hop-by-hop headers)
  that it would have received had its request been handled directly
  by the origin server.

2.RFC2616「13.1.3キャッシュ制御メカニズム」の文が理解できない

Cache-Controlヘッダーを使用すると、クライアントまたはサーバーは、要求または応答のいずれかでさまざまなディレクティブを送信できます。これらのディレクティブは通常、デフォルトのキャッシュアルゴリズムをオーバーライドします。原則として、ヘッダー値の間に明らかな矛盾がある場合は、最も制限的な解釈が適用されます(つまり、セマンティックの透明性を維持する可能性が最も高い解釈)。

「Cache-Control」ヘッダーのこれらの競合値を混乱させています。

3.ApacheWebサーバーを介していくつかの例をテストします

3.1Webトポロジ

Telnet(クライアント)<-> HTTPプロキシ(Apacheはプロキシモードで動作します、S1)<-> Webサーバー(Apache、S2)

3.1.1 S1構成(キャッシングプロキシとして機能):

<Location />
    ProxyPass http://10.8.1.24:80/
</Location>

<IfModule mod_cache.c>

        <IfModule mod_mem_cache.c>
            CacheEnable mem /
            MCacheSize 4096
            MCacheMaxObjectCount 100
            MCacheMinObjectSize 1
            MCacheMaxObjectSize 2048
        </IfModule>

        CacheDefaultExpire 86400
</IfModule>

3.1.2 S2構成(実際のWebサーバーとして機能):

<filesMatch "\.(html|png)">
    Header set Cache-Control "max-age=5, max-age=15"
</filesMatch>

3.2テストケース

3.2.12つの「最大年齢」値

GET /index.html HTTP/1.1
Host: haha
User-Agent: telnet


HTTP/1.1 200 OK
Date: Wed, 13 Mar 2013 03:40:25 GMT
Server: Apache/2.2.23 (Win32)
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "63e62-2c-3e9564c23b600"
Accept-Ranges: bytes
Content-Length: 44
Cache-Control: max-age=5, max-age=35, must-revalidate
Age: 3
Content-Type: text/html

<html><body><h1>It works!</h1></body></html>

値「max-age=5」が適用されます。ここでは、「max-age = 35」が適用されていると思います。この値は、「セマンティック透過性」の概念からパフォーマンスを向上させるための後続の要求に対して、コンテンツをキャッシュとサーバーに長く保存できるためです。

3.2.2 max-age=35および再検証する必要があります

GET /index.html HTTP/1.1
Host: haha
User-Agent: telnet

HTTP/1.1 200 OK
Date: Wed, 13 Mar 2013 03:41:24 GMT
Server: Apache/2.2.23 (Win32)
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "63e62-2c-3e9564c23b600"
Accept-Ranges: bytes
Content-Length: 44
Cache-Control: max-age=35, must-revalidate
Age: 10
Content-Type: text/html

<html><body><h1>It works!</h1></body></html>

値max-age=35が適用されます。ここでは、「再検証する必要がある」という値を適用する必要があると思います。

3.2.3 max-age=35およびno-store

GET /index.html HTTP/1.1
Host: haha
User-Agent: telnet

HTTP/1.1 200 OK
Date: Wed, 13 Mar 2013 03:45:04 GMT
Server: Apache/2.2.24 (Unix)
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "63e62-2c-3e9564c23b600"
Accept-Ranges: bytes
Content-Length: 44
Cache-Control: max-age=35, no-store
Content-Type: text/html

<html><body><h1>It works!</h1></body></html>

値「no-store」が適用されます。

3.2.4 max-age=36およびキャッシュなし

GET /index.html HTTP/1.1
Host: haha
User-Agent: telnet

HTTP/1.1 200 OK
Date: Wed, 13 Mar 2013 06:22:14 GMT
Server: Apache/2.2.24 (Unix)
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "63e62-2c-3e9564c23b600"
Accept-Ranges: bytes
Content-Length: 44
Cache-Control: max-age=35, no-cache
Content-Type: text/html

<html><body><h1>It works!</h1></body></html>

値「no-cache」が適用されます。

参照:RFC2616 https://www.rfc-editor.org/rfc/rfc2616

4

1 に答える 1

0

私はあなたが与えた例を次のように解釈します:

  • max-age=5, max-age=15max-age=5キャッシュ時間が短く、制限が厳しいため、勝ちます

  • max-age=5, max-age=35, must-revalidatemust-revalidateクライアントが常にリクエストを再検証する必要があるため、勝ちます。そしてセクション14.9.4は言う:

      The must-revalidate directive is necessary to support reliable
      operation for certain protocol features. In all circumstances an
      HTTP/1.1 cache MUST obey the must-revalidate directive;
    
  • max-age=35, no-storeno-store勝ちます。これは、基本的にキャッシュを実行する必要がないことを意味するためです。これは確かに最も制限が厳しいものです。

  • max-age=35, no-cacheno-cachewinsは、フィールド名に類似してno-storeおり、フィールド名を指定していないためです。つまり、キャッシュは、2つのうち、より制限の厳しい後続のリクエストに対して応答を再利用してはなりません。

于 2013-03-13T07:03:19.877 に答える