对于网站建设来说,页面缓存是安装在网站服务器之前的缓存服务器,用于卸载对于服务器上的静态和动态对象的请求。在网站建设或网站制作中页面缓存还有其它常见名称,如反向代理缓存,反向**和反向代理。经过慎重考虑,最后还是采用了页面缓存这个术语,因为在建站系统中代理程序还会负责负载平衡或SSL加速,而我们只想专注于缓存服务器对可扩展性的影响。
页面缓存会处理部分或所有请求,直到它存储的页面或数据过期,或服务器收到的请求需要没有被缓存的数据。请求失败叫做缓存未命中,原因可能是缓存满了,没有空间为最新的请求缓存数据,也可能是缓存未满,但请求的频率较低或最近重启过。未命中缓存的请求会被直接传递给web server,并且用该请求回答并填充缓存,从而替换缓存中最近很少使用的数据,或者在空白处写入数据
第一,应该在web server处理请求之前实现页面缓存,这样建站系统就会得到很大的可扩展性。生成动态内容的web server工作量会大大减少,因为计算过的结果在合适的时间被恰当的缓存了。提供静态内容的web server不需要查询的内容,可以少用一些缓存空间。因此,对于静态网站来说,缓存的作用就不那么明显了,因为输出内容本身就没有太大的计算量和负担。
第二,建站系统中要实现缓存必须使用正确的http头,确保对内容和查询结果进行最大化的缓存,并且网站建设时避免通过meta标签刷新页面(当然是在确保业务正确性的前提下)。
第三点,尽可能加入RFC2616标准中的另一个http响应头参数,从而最大化内容的可缓存性。这个新的参数是ETag,也就是实体标签,目的是配合If-None-Match有条件地从服务器获得请求。ETag是由服务器端的资源改变了,那么服务器会为它分配一个新的ETag。假设能被浏览器正确地支持,对象和它的ETag标签就会被浏览器缓存,之后浏览器向web server发送的If-None-Match请求都会包含该标签。如果标签匹配,服务器会用http 304 not modified进行响应。如果该标签与服务器上的不一致,服务器会发送更新过的对象以及与之相关的ETag。