没有访问服务器的ASP缓存控制和ETag

时间:2014-10-15 14:38:01

标签: caching asp-classic cache-control google-pagespeed etags

我希望优化我的ASP页面。 Google最佳做法告诉我设置过期日期,修改日期和ETag等。

我明白了这一切的逻辑,但我不了解实施的细节,因为我们使用ASP页面,很难找到这些信息而且我没有#&# 39;有权直接在服务器上更改任何内容。

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

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

ETag如何运作?我只是为网址决定一个数字还是必须有一些逻辑?

我们网站上的大多数网页都有每年只更改1或2的内容,然后是每天或每周更改的图像文件。

1 个答案:

答案 0 :(得分:0)

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

即。 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字段,而不是使用Date,因此只有在内容更改时才会更改。

(注意:我没有使用etags,我使用Last-modifiedIf-Modified-Since标头代替浏览器端缓存,原因很明显。)