Cache-Controlでのプライベートとパブリック


127

IISでホストされているasp.netアプリケーションのパブリックとプライベートのキャッシュ制御の違いを示す例を教えてください。

私はMSDNで、違いは次のとおりであることを読みました:

Public: Cache-Control:publicを設定して、クライアントおよび共有(プロキシ)キャッシュが応答をキャッシュできることを指定します。

プライベート:デフォルト値。Cache-Control:privateを設定して、応答がクライアントでのみキャッシュ可能であり、共有(プロキシサーバー)キャッシュではキャッシュできないことを指定します。

私はそれぞれの選択から長所と短所を完全に理解したかどうかはわかりません。いつ使用するかしないかの例は素晴らしいでしょう。

たとえば、同じアプリケーションをホストしている2つのWebサーバーがある場合はどうすればよいですか?プライベートまたはパブリックを選択した場合、注意することはありますか?

回答:


237

唯一の違いは、プライベートではプロキシを通過するデータをプロキシがキャッシュできないようにすることです。結局のところ、すべては、送信するページ/ファイルに含まれるデータに要約されます。

たとえば、ISPはあなたとインターネットの間に目に見えないプロキシを持っている可能性があります。つまり、Webページをキャッシュして、必要な帯域幅の量を減らし、コストを削減します。cache-control:privateを使用して、ページをキャッシュしないように指定します(ただし、最終ユーザーはキャッシュできます)。cache-control:publicを使用する場合、誰もがページをキャッシュしても問題ないので、プロキシはコピーを保持します。

経験則として、誰もがアクセスできるものである場合(このページのロゴなど)キャッシュ制御:キャッシュする人が多いほど、必要な帯域幅が少なくなるため、パブリックの方が良いかもしれません。接続されているユーザーに関連するものである場合(たとえば、このページのHTMLには私のユーザー名が含まれているため、他のユーザーには役に立たない)cache-control:プロキシがデータをキャッシュするため、プライベートの方が適しています他のユーザーからは要求されず、信頼できないサーバーに保持したくないデータも保持されている可能性があります。

そしてもちろん、パブリックでないものはすべてプライベートキャッシュを持つ必要があります。そうしないと、データは中間プロキシサーバーに格納される可能性があります。


39
唯一の違いは、プライベートではプロキシのキャッシュを許可しないということです...これはタイプミスだったと思います。それとは別に、答えに+1します。プライベートはある程度のセキュリティを提供しないことを追加する価値がありますが、それはまだ中間のエージェントによって見ることができます。それは単に、「正直な」エージェントが新しく生成された応答の代わりに他の誰かにそれを与えないことを意味します。
Jon Hanna

修繕!投稿する前に何度か読み直したので面白いですが、 "not"がそこにある必要があることは知っていたと思います。そして、はい。コメントに+1を付けてください。ユーザー関連のデータには推奨されますが、プライベートは真のセキュリティ(SSL)に取って代わるものではないことに注意してください。
salgiza

すべきでないときに「しない」と書いたり、必要なときに省略したりするのはとても簡単です。私は(異なる分野での)私自身の多くの自己編集が同じタイプミスを修正していることを知っています。
Jon Hanna

15
何も指定しない場合、デフォルトの動作は「パブリック」または「プライベート」ですか?
Pacerier 2013

1
@Honeyしかし、同じプロキシを使用する複数のクライアントが存在する可能性があります。すべてのクライアントに同じ応答を送信しても問題ない場合は、プロキシレベルでキャッシュしても問題ありません。それ以外の場合は、クライアントでキャッシュしても問題はありません(それでも問題が発生する場合もあります)が、プロキシではキャッシュされません。
Jon Hanna
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.