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
вместо заголовков для кэширования на стороне браузера, по очевидным причинам.)