HTML5を使用した小さなシングルページアプリケーションに取り組んでいます。1つの機能は、ページに埋め込まれたPDFドキュメントを表示することです。このドキュメントは、リストから選択できます。
今、私はChromeを(最初は、次に他のすべての最新のブラウザーは)ローカルクライアントキャッシュを使用して、サーバーを経由せずにPDFドキュメントの単純なGET要求を実行しようとしています(もちろん初めて以外)。<object>
HTMLの要素に「data」プロパティを設定してPDFファイルを要求します。
XMLHttpRequestの実用的な例を見つけました(ではありません<object>
)。Chromeの開発者ツール([ネットワーク]タブ)を使用すると、最初のリクエストがサーバーに送信され、次のヘッダーを含む応答が返されることがわかります。
Cache-Control:public,Public
Content-Encoding:gzip
Content-Length:130
Content-Type:text/plain; charset=utf-8
Date:Tue, 03 Jul 2012 20:34:15 GMT
Expires:Tue, 03 Jul 2012 20:35:15 GMT
Last-Modified:Tue, 03 Jul 2012 20:34:15 GMT
Server:Microsoft-IIS/7.5
Vary:Accept-Encoding
2番目のリクエストは、サーバーのラウンドトリップなしでローカルキャッシュから提供されます。これは、私が望んでいることです。
自分のアプリケーションに戻って、ASP-NETMVC4を使用して設定しました
[OutputCache(Duration=60)]
私のコントローラーで。このコントローラーへの最初のリクエスト-URLを使用http://localhost:63035/?doi=10.1155/2007/98732
すると、次のヘッダーが生成されます。
Cache-Control:public, max-age=60, s-maxage=0
Content-Length:238727
Content-Type:application/pdf
Date:Tue, 03 Jul 2012 20:45:08 GMT
Expires:Tue, 03 Jul 2012 20:46:06 GMT
Last-Modified:Tue, 03 Jul 2012 20:45:06 GMT
Server:Microsoft-IIS/8.0
Vary:*
2番目のリクエストは、サーバーへの別のラウンドトリップをもたらし、応答ははるかに速くなります(サーバー側のキャッシュを提案しますか?)が、200OKとこれらのヘッダーを返します。
Cache-Control:public, max-age=53, s-maxage=0
Content-Length:238727
Content-Type:application/pdf
Date:Tue, 03 Jul 2012 20:45:13 GMT
Expires:Tue, 03 Jul 2012 20:46:06 GMT
Last-Modified:Tue, 03 Jul 2012 20:45:06 GMT
Server:Microsoft-IIS/8.0
Vary:*
同じURLに対する3番目のリクエストは、さらに別のラウンドトリップと、これらのヘッダーを含む304応答になります。
Cache-Control:public, max-age=33, s-maxage=0
Date:Tue, 03 Jul 2012 20:45:33 GMT
Expires:Tue, 03 Jul 2012 20:46:06 GMT
Last-Modified:Tue, 03 Jul 2012 20:45:06 GMT
Server:Microsoft-IIS/8.0
Vary:*
私の質問は、目的の動作(つまり、最初のリクエストからX秒以内にクライアントキャッシュからPDFリクエストがいっぱいになる)を取得するために、OutputCache属性をどのように設定する必要があるかということです。
または、<object>
要素に「data」プロパティを設定してPDFを表示させるときに、正しく処理されていませんか?