304状态码: ?? ?即客户端第一次向服务器请求资源的时候,服务器会返回一些字段给客户端,客户端便可以判断是否将资源进行缓存; ?? ?当第二次请求的时候,请求头的对应的字段值和服务器的字段值进行比较,若资源修改了,则状态码为200,并重新返回新的字段值和资源,存入缓存中,若没有修改资源,则状态码为304,并直接读取缓存中资源。
一些字段: ?? ?expires:值是一个时间戳,表示过期的时间,当再一次请求时如未超过该值则用缓存的资源,否则重新请求。(该值的判断是通过本地的时间来判断,但本地时间可以修改,所以会有问题)
?? ?Cache-Control:1、值为no-cache:告诉浏览器忽略资源的缓存副本,强制每次请求直接发给服务器。2、no-store:强制缓存在任何情况不要保留副本。3、max-age:指明缓存的有效时长,单位秒数。4、public:任何缓存的地方都可以缓存该资源。5、private:针对于单个用户缓存资源。
?? ?Last-Modified:添加在响应头中,告诉客户端当前资源修改的最后时间。
?? ?if-Modified-Since:添加在请求头中,当第一次请求的时候,响应头的Last-Modified非空,第二次请求的时候会在请求头中加入该字段,之后发给服务器进行判断。
?? ?ETag:告诉浏览器当前资源在服务器的唯一标识符
?? ?if-None-Match:如果第一次请求的时候响应头的ETag 非空,第二次请求的时候,会将第一次的ETag的值携带在请求头中发给服务器。
关于缓存的一些: 浏览器缓存就是指在本地计算机中开辟一个内存区,保存用户访问的一些信息。
浏览器的缓存过程:强缓存,协商缓存。 ?? ?强缓存:当访问URL的时候,不会向服务器发送请求,直接从缓存中读取资源,但返回的状态码是200。 ?? ?强制缓存会把资源放到memory cache和disk cache,造成强缓存的字段:Cache-control和Expires。
memory cache:内存中的缓存,特点,短期存储,如果有一个页面的缓存占用很多内容,则前面的缓存会失效,将页面关闭,该缓存就会消失,就会查找disk cache里面的内容。 disk cache:存储在硬盘中的缓存,允许跨站点等。
?? ?协商缓存:当强缓存失效(超过规定时间)时,就需要用协商缓存。浏览器会先请求缓存数据库,返回标识,并与服务器比较,若缓存未失效,则返回304继续使用。造成协商缓存的字段:Last-Modified/if-Modified-since ?和 ETag/if-None-Match。
?
?? ?总的来说,在网络请求中,当客户端第一次发送请求到服务器的时候,若响应头中设置了cache-control和Last-Modified等,此时客户端判断是否对资源进行缓存,若缓存,则在下一次发送请求的时候,会查看cache-control里面的时间是否到期,若没有则会先从memory cache中获取资源,若关闭了页面,在下次发送请求,会在disk cache中寻找资源,在这之前返回的状态码都是200,当时间到期后,就会用到协商缓存,若对应的标识和服务器的标识是一样的,则此时的状态码是304,返回之前的资源,否则返回新的资源,并且状态码为200。
|