Web 缓存和条件 GET 语句
Web 缓存由代理服务器完成 - 原始服务器和客户端之间的中间实体。当客户端请求某些信息(通过 HTTP 消息)时,它会通过代理服务器,它 -
- 首先检查它是否有本地存储的副本。
- 如果有,则将结果直接转发给客户端。
- 否则,它代表终端主机查询,在本地存储结果的副本,并将结果转发回终端主机。
Web 缓存(或)代理服务器通常由 ISP(互联网服务提供商)、大学甚至公司办公室安装,其中多个终端主机连接到代理服务器。
安装代理服务器有很多好处——
- 它可以大大减少重复请求的响应时间。 (特别是如果原始服务器和接收器之间的瓶颈小于代理服务器和接收器之间的瓶颈。)
- 它减少了(大学或办公室的)接入链路带宽,从而降低了成本。
- 它减少了整个 Internet 上的流量。
但是有一个问题。
如果在原始服务器上修改了内容,导致代理服务器上的副本已过时怎么办?
这就是条件 GET 语句发挥作用的地方。当代理服务器接收到 HTTP 请求并且将结果存储在本地时,它仍会查询原始服务器,询问该特定对象自代理上次请求以来是否已修改服务器。
“Conditional GET”语句比普通 GET 语句有一个额外的字段,称为“If-modified-since”字段,它指定最后一次发出相同请求的时间。原始服务器 -
- 告诉代理服务器内容没有被修改——HTTP 304 状态码,或者
- 发送更新的内容(以防进行了一些修改)——HTTP 200 响应消息代码
如果代理服务器收到 304 - “No Modification” 消息,它会将其本地副本转发给客户端。如果修改已经存在,缓存会转发新对象,同时将其与接收新对象的日期和时间一起存储在本地(以便稍后可以向原始服务器请求修改)。
由于显而易见的原因,HTTP 304 消息不包含消息正文。