服务器收到请求时,会在 200OK中回送该资源的 Last-Modified和 ETag头,客户端将该资源保存在 cache中,并记录这两个属性。当客户端需要发送相同的请求时,会在请求中携带 If-Modified-Since和 If-None-Match两个头。两个头的值分别是响应中 Last-Modified和 ETag头的值。服务器通过这两个头判断本地资源未发生变化,客户端不需要重新下载,返回 304响应。常见流程如下图所示:
上面的图片的是访问百度的时候,黑色的请求是取得资源,灰色的请求是发送的有效性确认,然后接下来从缓存服务器获取资源。
下面是对使用缓存资源进行http请求的时候的头部,可以看出有来自缓存服务器的响应和对资源服务器进行有效性确认的响应头部。
第一个请求的请求头部:
因为http响应将Date和Expires字段设置为相同的值,所以缓存服务器不会缓存该资源,所以每次都会去请求源资源服务器。max-age设置为0也可以使每次都要想源服务器进行有效性确认,而不是某个时间段之内不用确认。
向源服务器进行验证,首部中存在If-Modified-Since字段,告诉服务器端只接受在该时间之后修改过的资源,如果在该时间之后没有修改,返回304。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-05 18:33:42