我正在使用 cefsharp(用于 .NET 的铬嵌入式框架)来托管一个 Web 应用程序,该应用程序使用 require js 来加载我的大多数 javascript 模块。
为了加快我的应用程序的速度,我通过响应标头“Cache-Control: public,max-age=864000”为我的所有静态内容启用了缓存。
当我部署我的 Web 应用程序的新版本时,我会在 require.config() 的 urlArgs 参数中添加一个版本号,该版本号会随着每次部署而递增,以在我的内容因 require JS 不发送而更改时执行“缓存破坏” “If-Modified-Since”或“If-None-Match”请求标头,因此浏览器不会根据电子标签或上次修改日期自动检测我的更改。
这种“缓存破坏”解决方案在 IE9、IE10 和独立 chrome(当前为 35 版)中完美运行。我的问题是,cefsharp 似乎完全忽略了我的缓存破坏查询字符串,并且当我更改查询字符串时仍会进入缓存。即使我附加了一个完全不同的查询字符串,例如时间戳(例如,请参见下面的片段),它也不会拉下新版本。
据我所知,这似乎是一个错误或可能是我无法在 CEF 或 cefsharp 中找到的配置设置,但我找不到任何关于为什么 cef/cefsharp 会忽略我的查询字符串并直接进入缓存的信息。
我已经运行 fiddler 并且可以看到当我更改查询字符串时它 cefsharp 没有发出请求。我也确实看到查询字符串出现在初始加载(当我手动删除缓存文件夹并重新加载时)。
有没有人知道为什么cefsharp会有这样的行为?我已经尝试过稳定版本(使用 chromium 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
谁能提供任何建议,我应该尝试的设置,解决方法等?对我来说不是一个真正的选择的一件事是在每次部署时手动删除缓存文件夹,因为我不会进入。
任何帮助深表感谢。
谢谢