Сайт, основанный на Azure ASP.NET MVC, отбрасывает HTTP-заголовки, связанные с кешем клиента

Недавно мы начали перемещать некоторые из наших веб-сайтов ASP.NET MVC из нашей собственной управляемой среды в Azure. Одна из проблем, которые мы видели, заключается в том, что кэширование на стороне клиента не работает должным образом при доставке динамически созданного контента. В частности, заголовки, связанные с кешем, добавленные в ответ HTTP в коде, удаляются.

Например, в старой среде возвращаются следующие заголовки, чтобы сообщить клиенту, что содержимое может быть кэшировано:

Cache-Control:          public, max-age=31533144
Content-Disposition:    attachment; filename=picture.png
Content-Length:         64326
Content-Type:           image/png
Date:                   Tue, 23 Jul 2013 15:44:57 GMT
Etag:                   "845D3DD630A7AEF5B68EA7A09B670A4D"
Expires:                Fri, 23 Aug 2013 14:57:22 GMT
Last-Modified:          Tue, 23 Jul 2013 14:57:22 GMT
Server:                 Microsoft-IIS/7.5

Но на Azure вместо этого возвращаются следующие заголовки:

Content-Disposition:    attachment; filename=picture.png
Content-Length:         64326
Content-Type:           image/png
Date:                   Tue, 23 Jul 2013 15:44:57 GMT
Server:                 Microsoft-IIS/8.0
X-Powered-By:           ARR/2.5, ASP.NET

Как вы можете видеть, заголовки Cache-Control, Etag, Expires и Last-Modified были удалены.

Я видел ряд предложений относительно кэширования статического контента, но я не думаю, что это поможет в этом случае. Это случай, когда структура Azure CDN предотвращает кеширование таким образом? Должны ли использоваться лазурные пятна? Есть ли основное изменение конфигурации, которое может быть упущено?

Заранее спасибо

Ответ 1

X-Powered-By:           ARR/2.5, ASP.NET

ARR обозначает маршрутизацию запросов приложений.

Перейдите в пользовательский интерфейс inetmgr и нажмите на имя сервера, и вы найдете параметр "Кэш маршрутизации запроса приложений".

Вы увидите "Конфигурация кэша", проверьте параметры там. Кроме того, проверьте "Правила управления кэшем". Нажмите "Добавить правило..." и попробуйте поиграть с ним.

Ответ 2

Сайт Azure для сайтов за ARR. ARR удалит некоторые HTTP-заголовки и добавит свои собственные, это не то, что у вас есть прямой контроль. Для вашей проблемы лучше использовать Azure CDN для статического контента. Это обращает внимание на заголовки управления кешем и использует их. Вы можете запустить CDN поверх контейнера хранения blob.