Установка далекого будущего истекает заголовок в коде - ASP.NET

Существует ли способ, которым я могу Программно установить, Истекает Заголовок в коде с ASP.NET? Конкретно я должен установить его на всей папке и всех подпапках, и папка содержит только статические файлы (JavaScript, CSS, Изображения и т.д.) и не aspx файлы, таким образом, я не могу только добавить некоторый код к коду aspx - позади page_load.

Я могу обычно устанавливать это непосредственно в IIS. Но сервер заблокирован вниз клиентом (у меня только есть доступ FTP к каталогу веб-приложения для развертывания), и то, чтобы заставлять клиент установить Истекает, Заголовок на IIS взял бы ледниковый период (это - государственный сектор / правительственный сайт).

Я делаю это по причинам оптимизации Фронтенда согласно рекомендациям Yahoo http://developer.yahoo.com/performance/rules.html#expires

Обновление: я попытался создать HttpModule...

public class FarFutureExpiresModule : IHttpModule
{
    public void Dispose() { }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpContext context = HttpContext.Current;

        string url = context.Request.Url.ToString();

        if (url.Contains("/StaticContent/"))
        {
            context.Response.Cache.SetExpires(DateTime.Now.AddYears(30));
        }
    }
}

Хотя это не видит для работы. Я поместил точку останова в код, и это, кажется, работает правильно. Однако, когда я анализирую необработанную Информацию заголовка HTTP в Firefox, истекает, значение не устанавливается. Заметьте, что я использую BeginRequest, но я также попытался сцепиться в PostReleaseRequestState и PreSendRequestHeaders, и они, кажется, не работают также. Какие-либо идеи?

Обновление 2: хорошо, таким образом, это кажется, потому что я выполняю IIS6, HttpModules не будет работать за статическими файлами, только динамические файлы (*.aspx и т.д.). Благодаря справке RickNZ я придумал следующий IHttpModule:

public class FarFutureExpiresModule : IHttpModule
{
    public void Dispose() { }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpContext context = HttpContext.Current;

        string url = context.Request.Url.ToString();

        if (url.Contains("/StaticContent/"))
        {
            context.Response.Cache.SetExpires(DateTime.Now.AddYears(30));
            context.Response.Cache.SetMaxAge(TimeSpan.FromDays(365.0 * 3.0));
        }
    }
}

... и это, кажется, работает, но только во встроенном веб-сервере в Visual Studio, и в IIS7 (когда в режиме Intergrated Pipeline). Коллега работы упомянул, что установил подстановочные отображения на IIS6, чтобы заставить HttpModules работать над статическими файлами, но если у меня есть доступ к IIS6, я мог бы просто установить Далекое будущее, Истекает заголовок непосредственно и не беспокойство с этим HttpModule. О, хорошо!

6
задан Shibu Thomas 2 November 2016 в 05:40
поделиться

2 ответа

Если вы используете IIS 7, самый простой способ сделать это - написать HttpModule, который запускается для статических файлов в интегрированном режиме, и установить оттуда заголовки Expires и Cache-Control. .

Обновление:

Ваш HttpModule должен работать, хотя обычно я также вызываю:

context.Response.Cache.SetMaxAge(TimeSpan.FromDays(365.));

Обновление 2:

В IIS 6 вам придется программно изменять метабазу. Это возможно, хотя для этого требуются повышенные разрешения.

Единственный другой вариант - написать модуль ISAPI на C ++.

3
ответ дан 17 December 2019 в 07:05
поделиться

Хорошие способы повышения производительности включают: сжатие ответов с помощью gzip (не самый простой с IIS6), минимизацию статических файлов (css, js), объединение статических файлов вместе ( один большой css, один большой js), используя спрайты. Идея состоит в том, чтобы уменьшить общее количество HTTP-запросов, а затем уменьшить размер ответов.

0
ответ дан 17 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: