ASP Cache Control и ETag без доступа к серверу

Я ищу, чтобы оптимизировать мои страницы ASP. Лучшие практики Google говорят мне, чтобы установить даты истечения срока действия, даты изменения, ETag и т. Д.

Я понимаю всю логику, но я не понимаю деталей реализации, и, поскольку мы используем ASP-страницы, очень сложно найти информацию, и у меня нет доступа, чтобы что-то изменить непосредственно на сервере.

Будет ли это тип информации, которую я хотел бы настроить? И с чем?

<%
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
%>

А как работают ETag? Я просто выбираю номер для URL или должна быть какая-то логика?

Большинство страниц нашего сайта имеют контент, который изменяется только 1 или 2 в год, а затем файлы изображений, которые иногда меняются ежедневно или еженедельно.

1 ответ

Не забудьте вернуть статус 304 Not Modified когда вы обнаружите попадание в кеш.

то есть. Etags, вам нужно сначала создать уникальный идентификатор для бит контента / страницы, а затем вернуть его в качестве заголовка. Затем браузер добавит этот заголовок запроса в следующий раз, когда попытается извлечь его, но если вы не вернете нужный статус, когда увидите заголовок запроса, он не будет полностью реализован.

В этом случае вы можете сделать что-то вроде этого:

eTag = "t153120141610"

If eTag = Request.ServerVariables("HTTP_ETAG") Then
  Response.Status = "304 Not Modified"
  Response.End
End If

Response.AddHeader "etag",eTag

Response.Write "Cache me next time via eTag: " & eTag

Просто убедитесь, что вы генерируете уникальный идентификатор, потому что легко вернуть содержимое чего-то еще, что уже хранится в клиентском браузере с тем же eTag. Удачи.


Редактировать:

Обычный способ создания самозаверяющего eTag - сначала идентифицировать все типы содержимого, которое будет кэшироваться (т. Е. Страницу форума, страницу публикации, страницу профиля), и обычно для каждого из них есть идентификатор. Затем закодируйте его, используя md5 или base64. Таким образом, вы можете сделать что-то подобное, если хотите сохранить это в браузере клиентов в течение 1 дня.

Страница профиля:

eTag = Base64Encode("Profile" & ProfileId & Date)

Это означает, что eTag будет меняться каждый день, поэтому он будет кэшироваться на 1 день, затем на следующий день будет сгенерирован новый eTag и старый eTag больше не будет распознаваться. Вы также можете иметь last modified date поле в базе данных или файле и использовать его вместо даты, поэтому он изменяется только при изменении содержимого.

(ПРИМЕЧАНИЕ: я не использую etags, я использую Last-modified а также If-Modified-Since вместо заголовков для кэширования на стороне браузера, по очевидным причинам.)

Другие вопросы по тегам