Просим браузеры кэшировать наши изображения (ASP.NET/IIS)

Я только что запустил приложение Google Page Speed на нашем сайте, и одна из рекомендаций заключалась в том, чтобы Используйте кеш браузера. Расширение показало следующее:

У следующих кэшируемых ресурсов короткий срок действия: Укажите срок действия не менее одной недели для следующих ресурсов:

<длинный список изображений >
<некоторые файлы JavaScript >

Как мне увеличить «срок свежести» определенных изображений?

Это проект ASP.NET, работающий на IIS7.5.


person Chuck Le Butt    schedule 10.06.2010    source источник
comment
Неужели ни у кого нет хорошего ответа на этот вопрос? :(   -  person Chuck Le Butt    schedule 11.06.2010


Ответы (3)


Я нашел ответ на свой вопрос в другом месте на этом сайте. Уот! (Не уверен, почему это не появилось, когда я впервые опубликовал это, но неважно, в конце концов я добрался до него.)

Для тех, кто заинтересован, ответ был таким (как опубликовано Gabriel McAdams):


Вы делаете это в IIS. Если вы используете IIS 7, вы можете добавить заголовок в файл web.config. Он находится в разделе system.webServer.

<staticContent>
    <clientCache httpExpires="Sun, 29 Mar 2020 00:00:00 GMT" cacheControlMode="UseExpires" />
</staticContent>

Это приведет к тому, что для всего статического содержимого заголовок HTTP expires будет установлен на 2020 год. Статическое содержимое означает все, что не обслуживается механизмом ASP.NET, например изображения, файлы сценариев и таблицы стилей.

Или, чтобы использовать относительный срок действия, используйте это:

<staticContent>
    <clientCache cacheControlMaxAge ="2.00:00:00" cacheControlMode="UseMaxAge" />
</staticContent>

Это приведет к тому, что весь статический контент будет иметь HTTP-заголовок expires, установленный на 2 дня.

person Chuck Le Butt    schedule 11.06.2010
comment
Скорость нашего сайта только что увеличилась примерно на 400%. Ура! - person Chuck Le Butt; 11.06.2010
comment
Я дал вам другой ответ, чем этот? Конфигурация, которую я написал, делает то же самое. И более того, ваш ответ был специфичен для конкретных изображений. - person sushil bharwani; 11.06.2010
comment
Что? 1. Вы ничего не объяснили, просто разместили чужой ответ с другого вопроса. 2. Вы не объяснили, какой контент будет затронут, даже когда я специально спросил. Изменить: похоже, вы только что добавили это. 3. Назначение даты в будущем не является полезным решением моей ситуации. Не могу поверить, что ты отметил мой ответ. Это невероятно отстойно. Но что угодно. - person Chuck Le Butt; 12.06.2010

Вам нужно будет добавить заголовок Expires к вашему статическому контенту, включая изображения, файлы html, js, css. Вы можете легко добавить заголовок expires в раздел system.webServer вашего web.config с помощью IIS7:

<staticContent>
    <clientCache httpExpires="Mon, 1 May 2020 05:00:00 GMT" cacheControlMode="UseExpires" />
</staticContent>
person sushil bharwani    schedule 10.06.2010
comment
К сожалению, ваш ответ поставил меня в тупик :( Повлияет ли это на ВЕСЬ контент, который мы доставляем пользователю? Как мы указываем определенные изображения, как я задал в своем вопросе? (Хотя я думаю, что это может быть полезным для заставить браузер кэшировать все...) - person Chuck Le Butt; 10.06.2010
comment
Хотел бы я дать вам ответ на это, извините за мои ограничения на платформе ASP и IIS. Я знаю, что для этого есть файл .htaccess на apache. Но в любом случае, почему вы просто хотите, чтобы некоторые из ваших изображений были кэшированы, а не все из них. Какая разница. - person sushil bharwani; 10.06.2010
comment
Боюсь, вы не ответили на мой вопрос :( Повлияет ли это на ВЕСЬ контент, который мы доставляем пользователю? Спасибо. - person Chuck Le Butt; 11.06.2010

Обычно вам нужно кэшировать все активы (css, js и изображения), html-файл будет иметь удалить ссылки, чтобы вы могли обновлять изображения.

Чтобы это работало, файлы html не могут быть частью staticContent. добавление нового обработчика для файлов html предотвращает их постоянное кэширование.

    <staticContent>
        <clientCache httpExpires="Sun, 29 Mar 2020 00:00:00 GMT" cacheControlMode="UseExpires" />
    </staticContent>
    <handlers>
      <add
        name="HtmlHandler"
        path="*.html"
        verb="*"
        type="System.Web.Handlers"
        preCondition="integratedMode"
      />
    </handlers>
person Miss.Vy    schedule 15.11.2015