1. ホーム
  2. http

[解決済み] HTTPのPOSTメソッドをキャッシュすることは可能ですか?

2022-04-24 20:29:31

質問

非常にシンプルなキャッシュのセマンティクスで:パラメータが同じなら(もちろんURLも同じ)、ヒットするのです。それは可能ですか?推奨されますか?

どのように解決するのですか?

対応する RFC 2616 をキャッシュすることができます。 レスポンス をPOSTメッセージに変換する際に、適切なヘッダを使用した場合。

<ブロッククオート

このメソッドのレスポンスはキャッシュされません。 は適切な Cache-Control または Expires ヘッダーフィールドを含んでいます。しかし 303 (See Other) レスポンスを使用すると、ユーザーエージェントに キャッシュ可能なリソースを取得します。

同じ RFC のセクション 13 (Caching in HTTP) で、キャッシュは POST の後に対応するエンティティを無効にしなければならないと明言されていることに注意してください。 リクエスト .

いくつかのHTTPメソッドは キャッシュはエンティティを無効化する。これは によって参照されるエンティティ Request-URI、またはLocationもしくは Content-Locationヘッダがある場合)。 これらのメソッドは

  - PUT
  - DELETE
  - POST

この仕様で、どうして意味のあるキャッシュが可能になるのか、私にはよくわかりません。

にも反映され、さらに明確化されています。 RFC 7231 (セクション 4.3.3.) は、RFC 2616 を廃止しています。

POSTリクエストに対するレスポンスは、以下を含む場合にのみキャッシュ可能です。

明示的な鮮度情報([RFC7234]のセクション 4.2.1 を参照)。

しかし、POSTキャッシュは広く実装されていない。 オリジンサーバーがクライアントに以下のことを望む場合 POSTの結果を、後に続くPOSTで再利用できるようにキャッシュする。 GETの場合、オリジンサーバーは、200(OK)応答を送信してもよい(MAY)。 と同じ値を持つContent-Locationヘッダーフィールドを持つ。 は、POSTの有効なリクエストURI(セクション3.1.4.2)と同じです。

これによると、キャッシュされたPOSTの結果(この能力がサーバーによって示される場合)は、その後、同じURIに対するGETリクエストの結果として使用することができます。