
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
缓存技术的应用在许多软件编程开发项目中都是非常常见的,而本文我们就通过案例分析来简单了解一下,http缓存技术应用基础知识分享。
对于一些具有重复性的HTTP请求,比如每次请求得到的数据都一样的,我们可以把这对「请求-响应」的数据都缓存在本地,那么下次就直接读取本地的数据,不必在通过网络获取服务器的响应了,这样的话HTTP/1.1的性能肯定肉眼可见的提升。
所以,避免发送HTTP请求的方法就是通过缓存技术,HTTP缓存有两种实现方式,分别是强制缓存和协商缓存。
强制缓存
强缓存指的是只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边。
强缓存是利用下面这两个HTTP响应头部(ResponseHeader)字段实现的,它们都用来表示资源在客户端缓存的有效期:
Cache-Control,是一个相对时间;
Expires,是一个绝对时间;
如果HTTP响应头部同时有Cache-Control和Expires字段的话,Cache-Control的优先级高于Expires。
Cache-control选项更多一些,设置更加精细,所以建议使用Cache-Control来实现强缓存。具体的实现流程如下:
当浏览器一次请求访问服务器资源时,服务器会在返回这个资源的同时,在Response头部加上Cache-Control,Cache-Control中设置了过期时间大小;
浏览器再次请求访问服务器中的该资源时,会先通过请求资源的时间与Cache-Control中设置的过期时间大小,来计算出该资源是否过期,如果没有,则使用该缓存,否则重新请求服务器;
服务器再次收到请求后,会再次更新Response头部的Cache-Control。
协商缓存
协商缓存就是与服务端协商之后,通过协商结果来判断是否使用本地缓存。
协商缓存可以基于两种头部来实现。
一种:请求头部中的If-Modified-Since字段与响应头部中的Last-Modified字段实现,这两个字段的意思是:
响应头部中的Last-Modified:标示这个响应资源的后修改时间;
请求头部中的If-Modified-Since:当资源过期了,发现响应头中具有Last-Modified声明,则再次发起请求的时候带上Last-Modified的时间,服务器收到请求后发现有If-Modified-Since则与被请求资源的后修改时间进行对比(Last-Modified),如果后修改时间较新(大),说明资源又被改过,则返回新资源,HTTP200OK;如果后修改时间较旧(小),说明资源无新修改,响应HTTP304走缓存。
二种:请求头部中的If-None-Match字段与响应头部中的ETag字段,这两个字段的意思是:
响应头部中Etag:标识响应资源;
请求头部中的If-None-Match:当资源过期时,浏览器发现响应头里有Etag,则再次向服务器发起请求时,会将请求头If-None-Match值设置为Etag的值。服务器收到请求后进行比对,如果资源没有变化返回304,如果资源变化了返回200。
一种实现方式是基于时间实现的,二种实现方式是基于一个标识实现的,相对来说后者可以更加准确地判断文件内容是否被修改,避免由于时间篡改导致的不可靠问题。
当使用ETag字段实现的协商缓存的过程:
当浏览器一次请求访问服务器资源时,服务器会在返回这个资源的同时,在Response头部加上ETag标识,这个标识的值是根据当前请求的资源生成的;
当浏览器再次请求访问服务器中的该资源时,先会先检查强制缓存是否过期:
如果没有过期,则直接使用本地缓存;
如果缓存过期了,会在Request头部加上If-None-Match字段,该字段的值就是ETag标识;
服务器再次收到请求后,
会根据请求中的If-None-Match值与当前请求的资源生成的标识进行比较:
如果值相等,则返回304NotModified,不会返回资源;
如果不相等,则返回200状态码和返回资源,并在Response头部加上新的ETag标识;
如果浏览器收到304的请求响应状态码,则会从本地缓存中加载资源,否则更新资源。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。