http

《HTTP权威指南》每章的知识点总结

View the Project on GitHub lvzhenbang/http

内容提要

使用缓存的优点

冗余的数据传输

带宽瓶颈

瞬间拥塞

距离时延

命中与未命中的

缓存的拓扑结构

缓存的处理步骤

	接收————解析————查询————新鲜度检测————创建响应————发送————记入日志

保持副本的新鲜

	
	Cache-Control: Max-Age=484200
	Expires: Fri, 28 Oct 2016 03:03:47 GMT
	

上面的Max-Age是相对时间,以秒为单位,理解为使用期,expires为绝对时间,为到期时间。


	If-Modified-Since: <date>

实际上上面那个date为服务器响应报文里面Last-Modified的时间。

缓存控制的能力

	Cache-Control: no-store //不能缓存
	
	Cache-Control: no-cache //在没有对服务器验证之前不能提供内容
	
	Cache-Control: must-revalidate //严格遵守新鲜验证规则
	
	Cache-Control: max-age //设置多长时间的过期时间(相对时间)
	
	Expires: <date> //设置多长的过期时间(绝对时间)
	
	(试探性过期)不设置首部,让缓存来决定,这个方式涉及到一种算法,比如缓存服务器通过查看最后修改时间,从而得到该文档的修改频繁度,从而为其设置缓存过期时间

上面的优先级从上到下依次降低。

	Cache-Control请求指令

	指令 							 					目的

	Cache-Control: max-stale  				缓存可以随意提供过期的文件。如果指定了参数<s>,在这段
	Cache-Control: max-stale = <s> 			时间内,文档就不能过期,这条指令放松了缓存的规则
	
	Cache-Control: min-fresh=<s>   			至少在未来<s>秒内文档要保持新鲜。这就使缓存规则更加严格了
	
	Cache-Control: max-age = <s> 			缓存无法返回缓存时间长于<s>秒的文档。这条指令会使得缓存规则更加
											严格,除非同时还发送了max-stale指令,在这种情况下,使用期可能会
											超过其过期时间

	Cache-Control: no-cache 				除非资源进行了再验证,否则这个客户端不会接受已缓存的
	Pragma: no-cache 						资源

	Cache-Control: no-store 				缓存应该尽快从存储器中删除文档的所有痕迹,因为其中可能会包含敏感信息

	Cache-Control: only-if-cached 			只有当缓存中有副本存在时,客户端才会获取一份副本

设置缓存控制

	<Files *.html>
		Header set Cache-control no-cache
	</Files>

详细算法

缓存广告