проблема с кэшированием: динамические CSS-файлы - PullRequest
4 голосов
/ 19 ноября 2009

У меня есть несколько CSS-файлов, которые должны генерироваться динамически (почему это сложно, но это необходимо). Простое решение состоит в том, чтобы изменить файлы в aspx-файлы и использовать теги <% =%> по мере необходимости, чтобы ввести нужные значения.

Это прекрасно работает, пока мы не перейдем к кешированию. Похоже, что браузер и сервер отказываются кешировать файл. Я пытался манипулировать различными заголовками кэша http, но браузер всегда повторно получает файл при каждой загрузке страницы. Сервер всегда отвечает HTTP 200 (и правильным содержимым), а не 304 (файл без изменений).

Как мне убедить браузер и сервер кэшировать эти динамические CSS-файлы?

Пример использования файла:

<html> <head> <link href="/style.aspx" type="text/css" rel="stylesheet"/> ...

Пример таблицы стилей с манипулированием заголовком кэша (без динамической части файла):

<%@ Page Language="C#" ContentType="text/css" EnableSessionState="False" %>
<% Response.Cache.SetLastModified(new DateTime(2009, 11, 18, 10, 1, 0)); Response.Cache.SetMaxAge(TimeSpan.FromDays(30)); Response.Cache.SetETag("4ffff353ff67ff1:0"); %>
... css здесь ...

Заголовки запроса к серверу включают следующее:

If-Modified-Since Wed, 18 Nov 2009 18:01:00 GMT
Cache-Control max-age=0

И соответствующие заголовки ответа сервера:

Cache-Control private, max-age=2592000
Last-Modified Wed, 18 Nov 2009 18:01:00 GMT
Date Wed, 18 Nov 2009 19:36:07 GMT

Есть идеи?

Ответы [ 4 ]

1 голос
/ 16 января 2012

генерирует динамический файл и устанавливает тип содержимого для того же cotent типа css, а затем он будет обрабатываться как css, не нужно отправлять его как aspx, даже если вы генерируете его динамически

0 голосов
/ 19 ноября 2009

Как насчет кэширования страницы .aspx, которая действует как файл css, используя что-то вроде этого:

<%@ OutputCache Duration="60" Location="Client" VaryByParam="None" %>

Как кэшировать в ASP.NET с помощью Visual C # .NET

0 голосов
/ 21 мая 2010

edit: Не знал, что это такой старый вопрос, надеюсь, это все равно кому-нибудь поможет.

Можете ли вы передать фиктивную, случайно сгенерированную строку запроса для принудительного повторного запуска?

Например:

<link href="<%=sStyleSheet%>" type="text/css" rel="stylesheet" />

а потом что-то вроде этого в вашем коде

Random random = new Random();
int num = random.Next(100000);
string sStyleSheet = "/style.aspx?q=" + num.ToString();
0 голосов
/ 19 ноября 2009

Вы пробовали Response.SetExpires ()? Это немного проще, чем установка даты мода и максимального возраста - возможно, вашему браузеру это понравится больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...