除非存在查询字符串,否则浏览器不会缓存处理程序响应

时间:2019-01-11 16:11:13

标签: asp.net google-chrome browser-cache httphandler cache-control

我写了一个返回javascript的asp.net http处理程序。在html页上包含引用此处理程序的脚本标签时,chrome / firefox不会报告除非中存在查询字符串(或'?')的被返回的cache-control:max-age标头。脚本标签src。因此,处理程序每​​次都被击中。 Firefox和Chrome都在发生这种情况。

以下是处理程序的实现:

Public Overrides Async Function ProcessRequestAsync(context As HttpContext) As Task
    Dim loader As New ScriptLoader(context)

    Dim sb As New StringBuilder()
    sb.Append(Await loader.GetScriptsAsync())
    sb.Append(loader.GetLoaderScript("engine"))
    sb.Append(loader.GetLoaderScript("styles"))

    Dim script As String = sb.ToString()

    context.Response.ContentType = "application/javascript"
    context.Response.Cache.SetCacheability(HttpCacheability.Public)
    context.Response.Cache.SetMaxAge(TimeSpan.FromHours(12))
    context.Response.Write(script)

End Function

HTML脚本标记:

<div>
    <script src="/ListingDisplay/loader/js"></script>
</div>

结果: https://i.ibb.co/hK8TQJ3/Capture.png

当我附加“?”时在脚本源上:

<div>
    <script src="/ListingDisplay/loader/js?"></script>
</div>

我得到了预期的结果,处理程序未在后续请求中被击中:

预期结果: https://i.ibb.co/x8S3W3v/Capture.png

有人见过吗?有什么想法吗?

0 个答案:

没有答案