WebResource.axd и HTTP-заголовки - PullRequest
2 голосов
/ 09 апреля 2009

Наш сайт только что перешел с .NET 1.1 на .NET 3.5 и в процессе обновил сторонние серверные элементы управления. Один из этих пакетов использует JavaScript, предоставленный через WebResource.axd. Они включены как обычные <script src="" /> теги.

Однако, наблюдая за трафиком, я вижу, что эти файлы JavaScript встречаются с заголовками, которые предотвращают кэширование на стороне клиента. И мы говорим много JavaScript. Заголовки, о которых идет речь:

Cache-control: no-cache, no-store
pragma: no-cache
Expires: -1

Эти заголовки настраиваются где-нибудь в .NET? Могу ли я перехватить эти запросы, кроме построения HttpModule? Это то, в чем я могу обвинить поставщика управления? <brandish weapon="blameGun" />

Спасибо

Baron

Ответы [ 3 ]

6 голосов
/ 09 апреля 2009

Вы можете попробовать:

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);

Другие типы HttpCacheability описаны здесь:

http://msdn.microsoft.com/en-us/library/system.web.httpcacheability.aspx

Edit:

Вы можете добавить это в файл Global.asax вместо модуля:

void Application_AuthorizeRequest(object sender, EventArgs e)
{
    if (Request.Path.IndexOf("WebResource.axd") > -1)
    {
        Response.Cache.SetCacheability(HttpCacheability.Public);
    }
}
5 голосов
/ 11 апреля 2009

Это может произойти, если ваш веб-сайт развернут с <compilation debug="true">, установленным в его web.config. В этом случае кэширование отключено, чтобы упростить отладку файлов JavaScript, используемых в качестве встроенных ресурсов. Решение состоит в том, чтобы просто установить для атрибута отладки тега компиляции значение false. Больше информации можно найти в этом отличном сообщении в блоге.

0 голосов
/ 12 апреля 2009

Спасибо за ваши ответы. Оказалось, что у нас уже был HttpModule, который я не хотел писать, и это было источником проблемы.

...