2017-08-08 31 views
1

だから私は、web.configで以下の設定を使って、IIS 10上でローカルにIIS 10で実行しているASP.NET MVC 5サイトをWindows 10のラップトップに持っています。最大エージングを使用してASP.NET MVC + IIS 10 - キャッシュコントロールは常にプライベート

<compilation debug="false" targetFramework="4.5.2" /> 

とCache-Controlヘッダ:Release構成、デバッグモードオフでコンパイル

<staticContent> 
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" /> 
</staticContent> 

しかし、関係なく、私は何をすべきか、私はいつもCache-を見ませんコントロール:プライベート

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 

私はすべてのモジュールをオフにし、失敗したトレース要求を実行しました。ヘッダが設定されている示した:

enter image description here

しかし、私は、ヘッダーが設定されているモジュールのように見えるこのManagedPipelineHandlerについて何を追跡することはできません。

私はカスタムヘッダとしてのCache-Controlを追加してみました:

<httpProtocol> 
    <customHeaders> 
    <remove name="X-Powered-By" /> 
    <remove name="Cache-Control" /> 
    <add name="Cache-Control" value="public, max-age=1800, must-revalidate" /> 
    </customHeaders> 
</httpProtocol> 

しかし、これが唯一の既存のプライベート設定に付加:

HTTP/1.1 200 OK 
Cache-Control: private,public, max-age=1800, must-revalidate 
Content-Type: text/html; charset=utf-8 

マイrunAllManagedModulesForAllRequests

設定は、他の記事を持っている偽であります提案が原因かもしれません。

私はこのヘッダーをコードで設定できることを知っていますが、なぜ&が「プライベート」設定を強制しているのかを知りたいと思っています。

誰も助言できますか?

UPDATE

Something is forcing responses to have cache-control: private in IIS7

要求(とあなたが有効になって出力キャッシュを持っている)のために使用され何も出力キャッシュはありませんときに、これは.NETのデフォルトの動作です。 web.configのsendCacheControlHeader属性を&のfalseに設定した場合、Cache-Control:privateヘッダーは取得されません!

奇妙なことに、あなたはまだノードに基づいて正しいのCache-Controlヘッダを得ることはありません - しかし、あなたはセクションを経由して、ヘッダを制御するので、これが機能するようになりました:このコンテキストで

<httpProtocol> 
    <customHeaders> 
    <remove name="X-Powered-By" /> 
    <add name="Cache-Control" value="max-age=30,public" /> 
    </customHeaders> 
</httpProtocol> 

答えて

0

キャッシュが制御されています.NETとMVCアプリケーションによって、これは「プライベート」な価値を推進しています。この値を制御するには、通常、コントローラーやアクションを適切なキャッシングビヘイビアで修飾します。

  • [OutputCache(...全くキャッシュ値が設定されていない場合)]>具体的には、秒単位の持続時間、符号化パラメータ、ヘッダまたは他の値によって変動、位置、または他の構成オプション

として「プライベート」の値を出力するキャッシュ制御を制御しますMVCで使用されるデフォルトです。キャッシュ設定をグローバルに適用する場合は、アプリケーションを初期化するときにフィルタを作成し、グローバルフィルタに適用することができます。

+0

「デフォルトの」MVC設定が、完全に正当なsystem.webserver設定よりも優先されると言っていますか?それはちょうど正しくないようです。 – Neil