HTTP缓存的主要目的是为了节约网络传输(避免重复下载资源),提高交互效率(直接读取本地缓存的资源,速度一般比网络传输快)。基于这些考虑,GET方法一般都支持缓存。
HEAD请求本身不下载任何资源,这是它与GET的唯一区别。 HEAD一般用于测试网络资源的有效性(是否存在),可访问性,以及缓存的资源是否需要更新。 如何验证资源是否过期和需要更新呢,根据ResponseHeader中的MetaInfo(例如LastModified, E-tag等)来判断。 首先,我们通过GET请求获取资源,并加入缓存中, 同时记录资源的更新时间LastModified。在下次需要该资源时,先给服务器发一个HEAD请求,HEAD的响应信息中包含了该资源的LastModified值,我们比较两个LastModified值,就可以判定该资源是否已在服务器端发生更改,从而决定是否需要重新下载资源和更新缓存。