Pragma

Pragma: ヘッダー (HTTP)

[1] Pragma: ヘッダーは、 キャッシュに関する指示を記述するものでした。 Cache-Control: ヘッダーの導入以前に使われていました。

仕様書

意味

[16] Pragma: ヘッダーは、 HTTP/1.0 時代に受信者に対する実装規定指令を記述するためのものとして導入されました。 HTTP/1.1 時代になって相互運用性を損ねるものとして非推奨とされています。 >>14

[17] 現在は Pragma: ヘッダーHTTP/1.0 キャッシュとの後方互換性のために no-cache 指令を記述するためのものとされています >>14

構文

[21] Pragma: ヘッダーの値は、1つ以上の pragma-directiveリスト (#) です >>14

  1. pragma-directive
  2. *
    1. OWS
    2. ,
    3. OWS
    4. pragma-directive

[22] pragma-directive は、名前と値を = で連結したものです。ただし = と値は省略できます。 >>14

[23] 名前は字句です >>14大文字・小文字不区別です。

[28] 仕様上は ABNF により no-cache大文字・小文字不区別と明確になっていますが、それ以外がそうなのかどうかは明言されていません。

[24] 値は字句または引用文字列です。 >>14

  1. 字句
  2. ?
    1. =
    2. |
      1. 字句
      2. 引用文字列

[26] 値の有無やその解釈は pragma-directive によって異なります。

[25] = の前後に BWS は無いようです。

文脈

[18] クライアントは、 HTTP/1.0 キャッシュとの後方互換性のために必要なら Pragma: no-cache を指定できます >>14

[13] 明記されていませんが、 304 でも使って良いと推測されます。

処理

[19] 要求Cache-Control: ヘッダーが含まれる場合、 Pragma: ヘッダーは無視されます >>14

[20] Cache-Control: no-cache が含まれなくても、 Cache-Control: ヘッダーがあれば無視されるようです。

[30] EventSource のための fetch では、 応答キャッシュヘッダーは無視するべきで、 キャッシュを使うべきではありません >>31

pragma-directive

[7] pragma-directive としては次のものがあります。

[2] この他 >>305 で多くの値が規定されています。

[27] no-cache 以外は非推奨とされているようですが (>>16)、 他の値も特に禁止はされていません。

[3] 指令の一覧は >>29JSON ファイルにも含まれています。

歴史

[5] >>11no-cache を RFC 1945 と同じ意味で定義しています。それだけ。

[6] >>11 は、構文を自然言語で Pragma := #(token *(";" parameter)) と定義していました。

[15] RFC 1945 (HTTP/1.0) 10.12; RFC 2068・2616 (HTTP/1.1) 14.32 Pragma

The Pragma general-header field is used to include implementation-specific directives that may {2616} might apply to any recipient along the request/response chain. All pragma directives specify optional behavior from the viewpoint of the protocol; however, some systems may MAY require that behavior be consistent with the directives.

Pragma 一般頭欄は、要求・応答鎖沿いの任意の受信者に適用するかもしれない実装規定の指令を含めるのに使います。 すべての語用指令は、プロトコルの見地からの任意選択の動作を指定します。 しかし、システムによってはその動作が指令と一貫していることを要求しても構いません

  • Pragma = "Pragma" ":" 1#pragma-directive
  • pragma-directive = "no-cache" | extension-pragma
  • extension-pragma = token [ "=" word ]
  • extension-pragma = token [ "=" ( token | quoted-string ) ]

When the "no-cache" directive is present in a request message, an application should SHOULD forward the request toward the origin server even if it has a cached copy of what is being requested. This allows a client to insist upon receiving an authoritative response to its request. It also allows a client to refresh a cached copy which is known to be corrupted or stale. This pragma directive has the same semantics as the no-cache cache-directive (see section 14.9) and is defined here for backwards compatibility with HTTP/1.0. Clients SHOULD include both header fields when a no-cache request is sent to a server not known to be HTTP/1.1 compliant.

no-cache 指令が要求メッセージに示されている時は、 応用は、たとえ要求されているもののキャッシュした複製を持っていたとしても、 その要求を起源サーバーに転送するべきですこれによってクライアントはその要求に対する本家応答を受取ることを主張できます。クライアントが破壊されているまたは腐敗していると知っているキャッシュされた複製を更新することも可能になります。 この語用指令は、 no-cache cache-directive と同じ意味を持ちまして、ここでは HTTP/1.0 との後方互換性のために定義します。クライアントは、 no-cache 要求を HTTP/1.1 に従っていると分かっていないサーバーに送るときは両方の頭欄を含めるべきです

Pragma directives must MUST be passed through by a proxy or gateway application, regardless of their significance to that application, since the directives may might {2616} be applicable to all recipients along the request/response chain. It is not possible to specify a pragma for a specific recipient; however, any pragma directive not relevant to a recipient should SHOULD be ignored by that recipient.

Pragma 指令を、串や関門の応用は、その応用での重要度に拘らず、 次に渡さなければなりません。なぜなら、指令は要求・応答鎖沿いのすべての受信者に適用可能かもしれないからです。 特定の受信者に語用を指定することはできません。しかし、受信者に関係のない語用指令はその受信者では無視するべきです

HTTP/1.1 clients SHOULD NOT send the Pragma request-header. HTTP/1.1 caches SHOULD treat "Pragma: no-cache" as if the client had sent "Cache-Control: no-cache". No new Pragma directives will be defined in HTTP.

;HTTP/1.1 クライアントは Pragma 要求頭を送るべきではありません HTTP/1.1 キャッシュは Pragma: no-cache をクライアントが Cache-Control: no-cache を送ったのであるとして扱うべきです。 新しい Pragma 指令は 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 (ママ)

注意: 応答頭欄としての Pragma: no-cache の意味は実際には規定されていませんから、 応答中での Cache-Control: no-cache の信頼できる置換は提供されません。

注: 注記のない修正部は RFC 1945→2068 の変更点。

[12] RFC 3507 - Internet Content Adaptation Protocol (ICAP) ( ( 版)) http://tools.ietf.org/html/rfc3507#section-4.3.1

統計

[8] HTTP/1.1 Pragma header ( 版) http://www.http-stats.com/Pragma

[9] >>8 より

    * Pragma: no-cache
    * Pragma: no-cache, xResetStrm=1
    * Pragma: No-cache
    * Pragma: cache
    * Pragma: No-Cache
    * Pragma: private
    * Pragma: public
    * Pragma: no-store
    * Pragma: no-store, no-cache, must-revalidate
    * Pragma: no cache
    * Pragma: NO-CACHE
    * Pragma: Private
    * Pragma: no-cache, no-cache
    * Pragma: no-cash
    * Pragma: no-chache
    * Pragma: no-store,no-cache
    * Pragma: no_cache
    * Pragma: nocache

[10]

Pragma: no-cache,rate=1.000000,stream-time=0,stream-offset=0:0,request-context=1,max-duration=0
Pragma: xClientGUID={baadc101-8645-d5a3-9571d14a66ea2b8f}

[305] 2.2.1.4 Pragma ( ( 版)) http://msdn.microsoft.com/en-us/library/cc251236.aspx

[306] Request Headers in the HTTP protocol ( ( 版)) http://www.w3.org/Protocols/HTTP/HTRQ_Headers.html#pragma

[307] The Performance Impact of META REFRESH - IEInternals - Site Home - MSDN Blogs ( ( 版)) http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/meta-refresh-causes-additional-http-requests.aspx

[32] Using Akamai Pragma headers to investigate or t... | Akamai Community ( ()) https://community.akamai.com/community/web-performance/blog/2015/03/31/using-akamai-pragma-headers-to-investigate-or-troubleshoot-akamai-content-delivery

Pragma: akamai-x-cache-on, akamai-x-cache-remote-on, akamai-x-check-cacheable, akamai-x-get-cache-key, akamai-x-get-ssl-client-session-id, akamai-x-get-true-cache-key, akamai-x-get-request-id

[33] Knowledge Base #7693 - Akamai Pragmaヘッダーをリクエストに... | Akamai Community ( ()) https://community.akamai.com/docs/DOC-6369

akamai-x-cache-on, akamai-x-cache-remote-on, akamai-x-check-cacheable, akamai-x-get-cache-key, akamai-x-get-extracted-values, akamai-x-get-nonces, akamai-x-get-ssl-client-session-id, akamai-x-get-true-cache-key, akamai-x-serial-no, akamai-x-get-request-id, akamai-x-request-trace, akamai-x--meta-trace, akama-xi-get-extracted-values

[34] Pragma · Issue #140 · httpwg/http-core () https://github.com/httpwg/http-core/issues/140

[35] Deprecate Pragma by mnot · Pull Request #174 · httpwg/http-core () https://github.com/httpwg/http-core/pull/174