web-dev-qa-db-ja.com

プラグマとCache-controlヘッダーの違いは?

私はPragmaについて読みました Wikipedia のヘッダー:

「Pragma:no-cache headerフィールドは、リクエストで使用することを目的としたHTTP/1.0ヘッダーです。ブラウザは、サーバーではなく、リソースの最新バージョンが必要であることをサーバーおよび中間キャッシュに伝える手段です。ブラウザにリソースをキャッシュしないように伝えます。一部のユーザーエージェントは応答でこのヘッダーに注意を払っていますが、HTTP/1.1 RFCはこの動作に依存することに対して特に警告しています。」

しかし、私はそれが何をするのか理解していませんか?値がCache-Controlであるno-cacheヘッダーと値もno-cacheであるPragmaの違いは何ですか?

150
saplingPro

PragmaはHTTP/1.0実装であり、cache-controlは同じ概念のHTTP/1.1実装です。どちらも、クライアントが応答をキャッシュするのを防ぐためのものです。古いクライアントはHTTP/1.1をサポートしていない可能性があるため、そのヘッダーはまだ使用されています。

165
Eric Brenden

Pragmaはクライアントによるリクエストにのみ適用可能として定義されるのに対して、Cache-Controlはクライアントのリクエストとサーバーの応答の両方で使用される場合があることを除いて、違いはありません。

したがって、標準に関する限り、それらは、クライアントがリクエストを作成し、サーバーがクライアントからリクエストを受信するという観点からのみ比較できます。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32 は、シナリオを次のように定義します。

HTTP/1.1キャッシュは、クライアントが「Cache-Control:no-cache」を送信したかのように「Pragma:no-cache」を処理する必要があります。 HTTPでは、新しいプラグマディレクティブは定義されません。

  Note: because the meaning of "Pragma: no-cache as a response
  header field is not actually specified, it does not provide a
  reliable replacement for "Cache-Control: no-cache" in a response

上記の読み方:

  • クライアントを作成していて、no-cacheが必要な場合:

    • Pragma: no-cacheがサーバーでサポートされているかどうかわからない場合があるため、リクエストでCache-Controlを使用するだけです。
    • しかし、返信で、キャッシュするかどうかを決定するには、Cache-Controlを確認してください
  • サーバーを作成している場合:

    • クライアントからのリクエストの解析では、Cache-Controlを確認してください。見つからない場合は、Pragma: no-cacheを確認し、Cache-Control: no-cacheロジックを実行します。
    • 返信では、Cache-Controlを提供します。

もちろん、現実はRFCで記述または暗示されているものとは異なる場合があります。

89
cnst
| Stop using          | Replace with                     |
| (HTTP 1.0)          | (HTTP 1.1 - 1999)                |
|---------------------|----------------------------------|
| Expires: [date]     | Cache-Control: max-age=[seconds] |
| Pragma: no-cache    | Cache-Control: nocache           |

1999年以降、まだExpiresまたはPragmaを使用している場合は、間違っています。

私はあなたにStackoverflowを見ています:

200 OK
Pragma: no-cache
Content-Type: application/json
X-Frame-Options: SAMEORIGIN
X-Request-Guid: a3433194-4a03-4206-91ea-6a40f9bfd824
Strict-Transport-Security: max-age=15552000
Content-Length: 54
Accept-Ranges: bytes
Date: Tue, 03 Apr 2018 19:03:12 GMT
Via: 1.1 varnish
Connection: keep-alive
X-Served-By: cache-yyz8333-YYZ
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1522782193.766958,VS0,VE30
Vary: Fastly-SSL
X-DNS-Prefetch-Control: off
Cache-Control: private

tl; dr:PragmaはHTTP/1.0のレガシーであり、Internet Explorer 5またはNetscape 4.7以降は必要ありません。

6
Ian Boyd