文章目录
一、响应头
1、cache-control
-
max-age=
资源保存的最长时间,单位为秒 eg: max-age=3153600 -
no-cache
可以缓存,但是每次使用前都要和服务器进行确认,同时代理服务器也不能对资源进行缓存。一般网页框架不会经常改变就可以这样设置,如果资源长期不变,只需要发送体积很小的信息与服务器进行确认 -
no-store
直接让浏览器不要缓存了,每次都要向服务器请求资源 -
private
表示资源只能给这个浏览器缓存,其他什么代理服务器都不能进行缓存 -
-
public
表示浏览器和代理服务器都可以缓存
-
2、etag
资源的标识,每次资源更新后,etag就会变化
3、expires
表示缓存的过期时间,当过期时间没有到达的时候,都表示资源未过期,不会和服务器要求更新资源。如果服务器时钟不同步,那么时间就是出现误差, 因此 expires经常会和last-modified配合使用
4、last-modified
表示资源的最后修改时间,客户端下次请求时可以检查最后修改资源的时间是否一致,如果一致就表示资源未修改,如果不一致就得让服务器返回新的资源
二、请求头
1、if-modified-since
值为上一次响应给客户端的 last-modified 值或者一个 etag 列表, 当且仅当服务器上没有任何资源的 ETag 属性值与这个首部中列出的相匹配的时候,服务器端才会返回所请求的资源,响应码为 200,并会返回相应的缓存头信息,客户端接收到新资源后会舍弃旧缓存,将新的资源缓存起来。 如果服务器上有匹配的资源,则返回403,内容为空,客户端直接使用本地的资源。
2、if-none-match
值为 上次返回的 etag 值, 如果与服务器的一致则返回403
,客户端启用本地的缓存;不一致则返回新的资源,并更新。
当与 if-modified-since 一起使用的时候, if-none-match
优先级更高
值可以为 ’*‘,代表任意资源。它只用在进行资源上传时,通常是采用 PUT 方法,来检测拥有相同识别 ID 的资源是否已经上传过了。
3、if-match
值可以为 ’*‘,星号是一个特殊值,可以指代任意资源。
表示这是一个条件请求。在请求方法为 GET
和 HEAD
的情况下,服务器仅在请求的资源满足此首部列出的 ETag
值时才会返回资源。而对于 PUT
或其他非安全方法来说,只有在满足条件的情况下才可以将资源上传。
ETag
之间的比较使用的是强比较算法,即只有在每一个字节都相同的情况下,才可以认为两个文件是相同的。在 ETag
前面添加 W/
前缀表示可以采用相对宽松的算法。