Браузер не кэширует ответ обработчика, если отсутствует строка запроса - PullRequest
0 голосов
/ 11 января 2019

Я написал http-обработчик asp.net, который возвращает javascript. При включении тега сценария на html-страницу, которая ссылается на этот обработчик, chrome / firefox не сообщает элементу управления кэшем: заголовок 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

Кто-нибудь когда-нибудь видел это? Есть идеи?

...