1

我正在寻找优化我的 ASP 页面。谷歌最佳实践告诉我设置过期日期、修改日期和 ETag 等。

我明白这一切的逻辑,但我不了解实现的细节,而且由于我们使用的是 ASP 页面,因此很难找到信息,而且我无权直接在服务器上更改任何内容。

这会是我想要配置的信息类型吗?用什么?

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

ETags 是如何工作的?我只是决定网址的数字还是必须有一些逻辑?

我们网站上的大多数页面的内容每年仅更改 1 或 2 次,而图像文件有时每天或每周更改一次。

4

1 回答 1

0

304 Not Modified当您检测到缓存命中时,不要忘记返回状态。

IE。Etags,您需要先为内容/页面的位生成唯一的 id,然后将其作为标题返回。然后浏览器将在下次尝试获取它时添加该请求标头,但是如果您在看到请求标头时没有返回正确的状态,则它没有完全实现。

在这种情况下,您可以执行以下操作:

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

只需确保您正在生成一个唯一的 id,因为很容易返回已经存储在具有相同 eTag 的客户端浏览器中的完全其他内容的内容。祝你好运。


编辑:

制作自签名 eTag 的一种常用方法是首先识别将被缓存的所有类型的内容(即:论坛页面、帖子页面、个人资料页面),并且通常每个都有一个 Id。然后使用 md5 或 base64 对其进行编码。因此,如果您想将其保留在客户端浏览器中 1 天,您可以执行此类操作。

个人资料页:

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

这意味着 eTag 每天都会更改,因此,它将被缓存 1 天,然后在第二天生成一个新的 eTag,旧的 eTag 将不再可识别。您还可以last modified date在数据库或文件中拥有一个字段并使用它来代替日期,因此它仅在内容更改时才会更改。

(注意:出于显而易见的原因,我不使用 etags,而是使用Last-modifiedIf-Modified-Sinceheaders 来进行浏览器端缓存。)

于 2014-10-16T07:01:32.577 回答