私はcefsharp(.NET用のクロム組み込みフレームワーク)を使用して、require jsを使用してほとんどのjavascriptモジュールにロードするWebアプリケーションをホストしています。
アプリケーションを高速化するために、すべての静的コンテンツに対して応答ヘッダー「Cache-Control: public,max-age=864000」を介してキャッシュを有効にしました。
Web アプリケーションの新しいバージョンを展開するとき、require.config() の urlArgs パラメータに展開ごとに増分されるバージョン番号を追加して、require JS が送信しないようにコンテンツが変更されたときに「キャッシュ バスト」を実行します。 「If-Modified-Since」または「If-None-Match」リクエスト ヘッダーを使用すると、ブラウザは e-tag または最終更新日に基づいて変更を自動的に検出しません。
この「キャッシュ無効化」ソリューションは、IE9、IE10、およびスタンドアロン クローム (現在バージョン 35) で完全に機能します。私の問題は、cefsharp がキャッシュ バスト クエリ文字列を完全に無視しているように見え、クエリ文字列を変更してもキャッシュに移動することです。タイムスタンプなどのまったく異なるクエリ文字列を追加しても (たとえば、以下のスニペットを参照)、新しいバージョンはプルダウンされません。
私が知る限り、これは CEF または cefsharp で見つけることができないバグまたはおそらく構成設定のようですが、cef/cefsharp がクエリ文字列を無視してキャッシュに直接移動する理由に関する情報が見つかりません。
私はフィドラーを実行しましたが、クエリ文字列を変更しても cefsharp がリクエストを行わないことがわかります。また、初期ロード時にクエリ文字列が存在することも確認しています (キャッシュ フォルダーを手動で削除してリロードしたとき)。
なぜcefsharpがこのように振る舞うのか、誰にも手がかりがありますか? 安定ビルド (クロム 25.x を使用) とプレリリース ビルドの両方を試しました。どちらも同じように動作します。
CefSharp リリース: https://github.com/cefsharp/CefSharp
JS url args コード スニペットが必要:
(function () {
"use strict";
require.config({
waitSeconds: 200,
paths: {
//Removed for brevity
},
shim: {
//Removed for brevity
},
urlArgs: 'v=8.4.1.7',
//urlArgs: "bust=" + (new Date()).getTime() //(also tried this as a test, no luck)
});
})();
CefSharp で構成したキャッシュ設定 (関連する部分のみを含む):
Private WithEvents _webView As CefSharp.WinForms.WebView
Private WithEvents _rq As Object
Private Sub Initialize()
'Enable both applicaton and page cache settings (i have tried disableing application cache, did not help)
Dim settings = New BrowserSettings()
settings.ApplicationCacheDisabled = False
settings.PageCacheDisabled = False
settings.LocalStorageDisabled = False
Dim s = New CefSharp.Settings()
s.PackLoadingDisabled = True
s.CachePath = "SOME_USER_SPECIFIC_PATH" 'Removed the actual path building code
If CEF.IsInitialized = False Then
CEF.Initialize(s)
End If
_webView = New CefSharp.WinForms.WebView(_url, settings)
_rq = New RequestHandler
_webView.RequestHandler = _rq
_webView.Dock = DockStyle.Fill
_webView.Refresh()
_webView.Load(_url)
End Sub
誰でも提案、試すべき設定、回避策などを提供できますか? 私にとって実際にはオプションではないことの1つは、私が入らない理由により、展開するたびにキャッシュフォルダーを手動で削除することです。
どんな助けでも大歓迎です。
ありがとう