Добавление истекающих заголовков в файл Web.Config - PullRequest
2 голосов
/ 11 ноября 2011

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

Я нашел следующий пример, но я хотел бы установить его толькокэшировать файлы JPG, PNG, GIF, JS и CSS, если это возможно?

<system.webServer>
    <staticContent>
        <clientCache cacheControlMaxAge="14.00:00:00" cacheControlMode="UseMaxAge"/>
    </staticContent>
</system.webServer>

Спасибо за любую помощь!

Ответы [ 4 ]

4 голосов
/ 20 февраля 2012

Что вы можете сделать, это создать файлы web.config в папках, в которых они находятся.(У вас может быть такая папка «Изображения» для изображений и «Js» для файлов javascript, «Css» для таблиц стилей ... и т. Д.) Затем вы вставляете код yor в эти файлы.Этим вы применяете настройки кэша ко всем файлам в этих папках, независимо от типа файла.Это более гибкий метод, чем применение настроек кэша к конкретному расширению файла.

3 голосов
/ 16 августа 2013

IIS НЕ поддерживает динамические заголовки expires для статического содержимого.

Вы можете добавить статический заголовок expires следующим образом:

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

Источник: Официальный сайт Microsoft IIS

Здесь есть похожий вопрос: IIS 7.5 Как добавить динамический заголовок Expires HTTP Expires

1 голос
/ 02 июня 2017

Как уже указывалось, использование другого web.config в определенной папке, вероятно, является наилучшим вариантом.

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

<system.webServer>
...
<rewrite>
  <outboundRules>
    <rule name="RewriteCacheControlForHTMLFiles" preCondition="jsFile">
        <match serverVariable="RESPONSE_Cache_Control" pattern=".*" />
        <action type="Rewrite" value="max-age=86400" />
    </rule>
    <preConditions>
        <preCondition name="jsFile">
            <add input="{REQUEST_FILENAME}" pattern="\.js$" />
        </preCondition>
    </preConditions>
  </outboundRules>
  ...
0 голосов
/ 12 ноября 2011

Если вы хотите кэшировать определенные элементы, я бы пошел по этому пути программно. Вы можете использовать следующий код, чтобы начать работу. Это от Microsoft, я просто принес его, чтобы вам не пришлось искать его. http://msdn.microsoft.com/en-us/library/ff477235.aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.Caching;
using System.IO;

public partial class _Default : System.Web.UI.Page
{


    protected void Button1_Click1(object sender, EventArgs e)
    {
        ObjectCache cache = MemoryCache.Default;
        string fileContents = cache["filecontents"] as string;

        if (fileContents == null)
        {
            CacheItemPolicy policy = new CacheItemPolicy();
            policy.AbsoluteExpiration =
                DateTimeOffset.Now.AddSeconds(10.0);

            List<string> filePaths = new List<string>();
            string cachedFilePath = Server.MapPath("~") +
                "\\cacheText.txt";

            filePaths.Add(cachedFilePath);

            policy.ChangeMonitors.Add(new
                HostFileChangeMonitor(filePaths));

            // Fetch the file contents.
            fileContents = File.ReadAllText(cachedFilePath) + "\n"
                + DateTime.Now.ToString();

            cache.Set("filecontents", fileContents, policy);

        }

        Label1.Text = fileContents;
    }
}
...