HTTP缓存

什么是HTTP缓存

HTTP缓存是HTTP协议重要的内容。

HTTP的缓存提供了一些算法和机制,允许我们把原始服务器上获取的内容缓存起来,在下一次发起同样的请求时,通过一些算法验证确定是否直接从缓存中获取内容。这样做不仅可以节省带宽,还提升了响应速度。

事实上,大部分我们在互联网浏览的内容,并不直接来自原始服务器,而是来自缓存。因为大部分的互联网内容并不是频繁变化的。

以下总结了几点HTTP缓存带来的好处:

  • 缓存减少了冗余的数据传输,节省内容发布者的网络费用。
  • 缓存缓解了网络瓶颈问题。不需要更多的带宽就能更快地加载网页。
  • 缓存降低了对原始服务器的要求。服务器可以更快地响应,避免出现过载现象。
  • 缓存降低了距离时延。因为从较远的地区访问页面会更慢一些。

私有缓存与公有代理缓存

缓存根据存放位置的不同,可以分为私有缓存公有代理缓存两类。

私有缓存

私有缓存是指本地客户端内置的缓存设备,比如浏览器内部就有一个缓存模块。浏览器将缓存的文档写入本地硬盘或内存中,并允许用户配置缓存的大小或其他设置。用户也可以在本地文件夹中查看这些缓存的文件,比如,对微软的Internet Explorer 来说,可以从Tools(工具) -> Internet Options(因特网选项)对话框中获取缓存内容。

公有代理缓存

公有代理缓存是独立的HTTP服务器,专门提供缓存服务。它是一种共享的代理服务器,可以接收多个用户的访问。

公有代理缓存不一定是单独一台服务器,它可能是一个服务器集群。这个集群可能是层级结构的,也可能是网状结构的。

私有缓存与公有代理缓存

私有缓存与公有代理缓存

请把缓存看做一个独立的个体

我们可以认为,无论私有缓存还是公有代理缓存,都可以看作是一个整体。

它接收客户端请求报文,处理并在某些条件下向源服务器发起请求,它接收源服务器向用户发起响应,处理并重装响应返回给客户端。

Cache-control首部控制实体缓存的位置

HTTP是通过响应首部Cache-control字段管理响应实体被缓存放的位置的:

  • Cache-control: private 表示将响应实体缓存在客户端的私有缓存中。
  • Cache-control: public 表示将响应实体缓存在代理缓存服务器中。

HTTP缓存步骤

除了一些微妙的细节之外,Web缓存的基本工作原理很简单。对一条HTTP GET请求的基本缓存处理过程包括7个步骤:

  • (1)接收:(代理)缓存从网络中读取客户端的请求报文。
  • (2)解析:(代理)缓存对请求报文进行解析,提取出URL和各种首部。
  • (3)查询:(代理)缓存查看是否有本地副本可用,如果没有,就从上一级代理或原始服务器中获取一份(并保存在本地)。
  • (4)新鲜度检测:(代理)缓存查看已缓存副本是否足够新鲜,如果不是,则询问服务器是否有任何更新。
  • (5)创建响应:(代理)缓存会用新的首部和已缓存的实体来构建一条响应报文。
  • (6)发送:(代理)缓存通过网络将响应发送给客户端。
  • (7)日志:(代理)缓存可选地创建一个日志文件条目来描述这个事务。

[图示]

总结

HTTP缓存过程很好理解,彻底理解它,需要关注下面四个方面: