如前所述,Apache中的缓冲存在两种不同工作方式。
mod_file_cache的缓冲区负责维护Apache启动时的文件内容。
当一个存在于该模块缓冲区中的文件被请求时,该请求将被拦截并用缓冲区中的内容为其提供服务。
mod_cache的缓冲区相对而言较为复杂。
当服务于一个请求时,如果它先前并未被缓存,则缓冲模块将会判断该内容是否可以被缓存。
判断应答的缓冲能力(cachability)基于以下条件:
必须为该URL启用了缓冲。
请参考CacheEnable和CacheDisable指令。
应答必须具有如下HTTP状态码:200, 203, 300, 301, 410 。
该请求必须是一个HTTP GET请求。
如果请求包含"Authorization:"头,则应答不被缓存。
如果应答包含"Authorization:"头,它必须同时也在"Cache-Control:“头中包含"s-maxage”、"must-revalidate"或"public"选项。
如果该URL包含一个请求字符串(比如来自于一个使用GET方法的HTML表格),除非应答包含"Expires:"头,否则将不被缓存。
这是基于RFC2616的13.9小节的规范。
如果应答的状态码是200(OK),除非明确打开了CacheIgnoreNoLastMod指令,否则该应答还必须至少包含一个"Etag"、"Last-Modified"或"Expires"头才能被缓存。
如果应答头"Cache-Control:"中包含"private"选项,除非明确打开了CacheStorePrivate指令,否则将不被缓存。
同样,如果应答头"Cache-Control:"中包含"no-store"选项,除非明确打开了CacheStoreNoStore指令,否则将不被缓存。
如果应答包含"Vary:“头,并且其中包含通配符”*"(匹配所有),也将不被缓存。