Cache Busting not working in CefSharp

时光怂恿深爱的人放手 提交于 2019-12-13 01:57:04

问题


I am using cefsharp (chromium embedded framework for .NET) to host a web application that uses require js to load in most of my javascript modules.

To speed up my application I have enabled cacheing via response headers "Cache-Control: public,max-age=864000" for all my static content.

When I deploy a new version of my web application i am appending a version number that gets incremented with every deployment in the urlArgs param of require.config() to perform a "cache bust" when my content changes as require JS does not send the "If-Modified-Since" or "If-None-Match" request headers so the browser is not automatically detecting my changes based on e-tag or last modified date.

This "cache busting" solution works perfectly in IE9, IE10, and Standalone chrome (version 35 currently). My problem is that cefsharp seems to completely ignore my cache bust query string and will still go to the cache when i change the query string. Even if i append a completely different query string such as a timestamp (see snippet below for example) it does not pull down a new version.

From what i can tell this seems to be a bug or possibly a configuration setting that i am unable to find in either CEF or cefsharp but i cannot find any information around why cef/cefsharp would be ignoring my query strings and going directly to cache.

I have run fiddler and can see that it cefsharp does not make a request when i change the query string. I also do see the query string is present on the initial load (when i manually delete the cache folder and reload).

Does anyone have any clues as to why cefsharp would be behaving like this? I have tried both the stable build (which uses chromium 25.x) as well as the Pre-release build. Both behave the same.

CefSharp releases: https://github.com/cefsharp/CefSharp

Require JS url args code snippet:

(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)
   });
})();

Cache settings that i have configured in CefSharp (included only the relevant pieces):

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

Can anyone offer any suggestions, settings i should try, workarounds etc? The one thing that is not really an option for me is to manually delete the cache folder on every deploy due to reasons that i will not get into.

Any help is much appreciated.

Thanks

来源:https://stackoverflow.com/questions/24151963/cache-busting-not-working-in-cefsharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!