OWASP ZAPで Cache-Control: no-cache, private が引っかかった。
不完全なキャッシュ制御やPragma HTTP ヘッダー設定
パッシブ (10015 - 不完全なキャッシュ制御やPragma HTTP ヘッダー設定)The cache-control and pragma HTTP header have not been set properly or are missing allowing the browser and proxies to cache content.
Whenever possible ensure the cache-control HTTP header is set with no-cache, no-store, must-revalidate; and that the pragma HTTP header is set with no-cache.
Cache-Control: private
Webサーバから返されるコンテンツがただ一人のユーザのためのものであることを示す。このコンテンツは、複数のユーザが共有されるキャッシュに記録されるべきではないことを表している。ただし、これは、一人のユーザのみが利用するキャッシュ(ブラウザのキャッシュ等)への記録を禁じるものではない。Cache-Control: private のみが指定されている場合、何らかのキャッシュへの記録が行われるおそれがある。
Cache-Control: no-cache
一見「キャッシュを使うな」のように見えるこのヘッダが実際に意味するところは少々ニュアンスが異なる。このヘッダの意味は、いちどキャッシュに記録されたコンテンツは、現在でも有効か否かを本来のWebサーバに問い合わせて確認がとれない限り再利用してはならない、という意味である。
IPA ISEC セキュア・プログラミング講座:Webアプリケーション編 第5章 暴露対策:プロキシキャッシュ対策
private 特定ユーザーだけが使えるようにキャッシュしてよい(主にブラウザ)
no-cache オリジンサーバでの確認無しにキャッシュを利用してはならない
「private」レスポンスは、ブラウザのキャッシュには格納できますが、 通常、対象ユーザーは 1 人のため、中間キャッシュに格納することは認められません。 たとえば、個人的なユーザー情報を含む HTML ページはそのユーザーのブラウザでのみキャッシュに格納でき、CDN では格納できません。
「no-cache」は、同じ URL に対する後続のリクエストへのレスポンスとして、以前返されたレスポンスを使用するには、まずサーバーに問い合わせてレスポンスに変更があったかどうかを確認する必要があることを示します。 そのため、適切な検証トークン(ETag)がある場合、no-cache を指定してもキャッシュされたレスポンスを検証するためのラウンドトリップは発生しますが、レスポンスに変更がなければダウンロードを省略できます。
HTTP キャッシュ | Web Fundamentals | Google Developers
セキュリティ対策としての Cache-Control ヘッダについて - 理系学生日記
Cache-Control: no-cache, private でも問題なさそうだけどな。
http - How do we control web page caching, across all browsers? - Stack Overflow
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0