Добавляем заголовок Expires. Разгоняем ASP.NET: 100 баллов и оценка "A" в YSlow. Практическое приложение. Оптимизация структуры веб-страниц
Используем CDN (Content Delivery Networks)
Добавляем заголовок Expires
Располагаем CSS-файлы в начале страницы
Располагаем JavaScript-файлы в конце страницы
Уменьшаем число DNS-запросов
Уменьшаем JavaScript
Удаляем дублирующиеся скрипты
Настройте ETag
У всех файлов, расположенных в CDN, уже выставлен этот заголовок. Для всех остальных можно создать следующий HttpModule:
private readonly static string[] CACHED_FILE_TYPES = new string[] { ".jpg", ".gif", ".png",".css" };
public void Init(HttpApplication context)
{
context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
}
void context_AcquireRequestState(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
if (context != null && context.Response != null)
{
string fileExtension = Path.GetExtension(context.Request.PhysicalPath).ToLower();
if (context.Response.Cache != null && Array.BinarySearch<string>(CACHED_FILE_TYPES, fileExtension) >= 0)
{
HttpCachePolicy cache = context.Response.Cache;
TimeSpan duration = TimeSpan.FromDays(365);
cache.SetCacheability(HttpCacheability.Public);
cache.SetExpires(DateTime.Now.Add(duration));
cache.SetValidUntilExpires(true);
cache.SetNoServerCaching();
cache.SetMaxAge(duration);
}
}
}
Вообще говоря, у вас вообще не должно быть этого модуля с учетом того, что все статические файлы должны быть расположены в CDN.