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-modified
和If-Modified-Since
headers 来进行浏览器端缓存。)