UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【HTTP】Cache-Control: no-store

あるページ回遊中にブラウザバックをすると挙動がおかしいバグに遭遇した

調べるとどうやらキャッシュしない方が良いところでキャッシュされていたのが原因のよう

ところで、キャッシュをしない設定というのはCache-Control: no-storeで制御が可能だが、Cache-Control: no-storeの設定方法はレスポンスヘッダーとリクエストヘッダーに設定する2通りあり、どちらか一方を設定すれば良いのか、両方設定すべきなのか迷ったので調査してみた

developer.mozilla.org

参考にしたのは以下 www.oreilly.co.jp

レスポンスヘッダに設定する

HTTP/1.1で追加され、キャッシュ制御をサーバー側から指示ができる

Expiresよりも優先される

組み合わせは

  • private, publicからひとつ。あるいは設定しない(デフォルトはprivate)
  • max-age, s-maxage, no-cache, no-store からひとつ
    ただ、ここの設定の有効無効はCDNなどによってはまちまちとのことなので、これらをすべて指定して次のようにしても構わないとのこと

    Cache-Control: private, no-store, no-cache, must-revalidate https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/405.html

リクエストヘッダーにCache-Controlの設定

リクエストヘッダーにCache-Controlの設定する場合、プロキシに対するキャッシュの指示を含めることができる

ただし、no-storeに関してはレスポンスヘッダに設定するのと同じ指示になる

結論、レスポンスヘッダーに仕込んでおけばよさそう

その他:HTMLのmetaタグに記述する

HTML4.xでは以下のように<meta>タグでブラウザキャッシュの制御が可能だった

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">

しかし、HTML5ではhttp-equivにこれらのキャッシュに関する設定はできない

https://html.spec.whatwg.org/multipage/semantics.html#pragma-directives

その他参考

https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=ja

https://qiita.com/anchoor/items/2dc6ab8347c940ea4648