Appearance
怎样写动态网站的缓存脚本
本节目标:理解“怎样写动态网站的缓存脚本”的核心思路,并能把它用于实际开发或面试表达。 默认情况下,大多数的脚本语言将不会返回验证器(
Last-ModifiedorETag响应头)或者缓存更新提示(ExpiresorCache-Control)。同时,一些真正的脚本语言是动态的(意味着他们对每个请求返回不同的响应资源),大多数站点(像搜索引擎和数据库驱动站点)都能从缓存脚本从受益。 一般来讲,如果在间隔的时间段(不管是相差几天还是几分钟),发出相同的请求,能够复写一个脚本输出,那么它就能够缓存。如果脚本输出的内容会随着URL的改变而改变,也是可以进行缓存的;但是如果脚本输出要依赖cookies,认证等,则不能缓存。
- 写一个优良的缓存脚本的最好办法是:不管内容何时更改,都将脚本的内容输出到普通的文件中,以便网站的服务器能够想其他网页一样对待它,从而生成和使用缓存的验证器。记住只对那些已经改变的文件进行写入,这样可以让
Last-Modified的值被保护起来. - 另一个让脚本可以缓存的方法是,设置一个有关存活时间的响应头,值设置为脚本能够使用的时间。虽然
Expires设置可以实现这一点,但是设置Cache-Control: max-age是最简单的, 它可以在一次请求发生后的一段时间里又发出新的请求。 - 如果你不能做到这些
,你将需要让脚本生成一个验证器,然后对浏览器发出请求中的If-Modified-Since和/或If-None-Match做出响应.通过分析HTTP头你能够做到这一点,只要在适当的时候返回304(缓存读取)响应状态即可。
小技巧:
- 如非必要,尽量不使用
POST方式.大多数的缓存无法保持对POST方式响应,你过你想通过路径或请求(GET)发送一些信息,缓存能够在未来存贮信息。 - 除非整个内容是要呈现给完整的用户,否则不要用
URL来传递用户的身份信息. - 不要指望来自一个用户的所有请求都是从同一个主机发出的
,因为缓存经常一起产生作用. - 设置响应头中的
Content-Length(用于描述HTTP消息实体的传输长度).它允许你的脚本可以在长连接通信时仍有响应,并且客户端可以通过一个TCP/IP连接请求不同的资源,而不是为一次请求的都建立一个通信
