2

HTTP および HTTPS 経由でファイルを要求するライブラリを作成しています。頻繁に要求される URL へのトラフィックを減らすために、取得したファイルをキャッシュし、そのキャッシュ設定を尊重したいと考えています。

HTTP RFC ではキャッシュの有効期限が非常に多く定義されているため、考えられるすべての組み合わせでチェックする必要があるため、キャッシュの有効期限は難しいようです。

  • Expires
  • Cache-Control(数十の可能な値)
  • Pragma

これらすべてを正しく実装する PHP コードを誰かがすでに書いていると想像できます。それはどこにある?

4

3 に答える 3

3

あなたは正しいです:誰かがすでにそれをしました:)

PHPフレームワークSymfony2には、標準ディストリビューションの一部としてキャッシングリバースプロキシが付属しています。ここのドキュメント:http ://symfony.com/doc/2.0/book/http_cache.html

于 2012-02-08T07:30:59.463 に答える
3

Squid、Varnish、さらには Apache mod_cache などのリバース プロキシを使用すると、キャッシュ関連の HTTP ヘッダーに関して非常に役立ちます。ただし、完全な PHP バージョンが必要な場合は、Cache-Control を優先してから Expires を使用する必要があります。これは、Cache-Control と Expires が同じ HTTP 応答で利用できる場合、httpで説明されているように、「max-age」属性よりも Cache-Control が優先されるためです。 ://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3 :

応答に Expires ヘッダーと max-age ディレクティブの両方が含まれている場合、Expires ヘッダーがより制限的であっても、max-age ディレクティブが Expires ヘッダーをオーバーライドします。このルールにより、オリジン サーバーは、特定の応答に対して、HTTP/1.0 キャッシュよりも HTTP/1.1 (またはそれ以降) のキャッシュに長い有効期限を提供できます。これは、特定の HTTP/1.0 キャッシュが年齢または有効期限を不適切に計算する場合に役立つ可能性があります。

また、「no-cache」属性には細心の注意を払う必要があります。これは、オリジン サーバーでの再検証が必要になるため、誤解を招く可能性があります。 -without-revalidation」ヘッダー。

次の 2 つの理由から、Pragma ヘッダーを無視することもできます。

  • 応答ヘッダーではなく、要求ヘッダーです
  • それはHTTP 1.0用であり、(ほぼ全体の)世界は現在HTTP 1.1です:)

「それが役立つことを願っています:)

于 2012-02-08T07:18:54.717 に答える
0

HTTP Cache PluginでGuzzleを使用することが、IMO の最良のソリューションです。

于 2014-01-10T04:41:55.997 に答える