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