当前位置: 首页 > Web前端 > HTML

http请求缓存头详解

时间:2023-04-02 20:34:52 HTML

缓存的作用:1.降低延迟(页面打开速度)。2.减轻服务器负载(先取缓存,请求不带缓存的服务器,有效减轻服务器负担)。3.保证稳定(有个段子说买手机的时候为了保证服务器的稳定性,在前端写一个随机数,限制20%的人向后台发送数据,也可以看出效果稳定性缓存)。下图是自己画的,有点丑,还请见谅!我稍后会解释!浏览器与服务器的通信由两部分组成:1.请求头(包括各种缓存信息)。2、请求体bdoy(数据传输的主要内容)pagecache由header决定,包含四个参数:1、expires:由http1.0引入,指服务器返回文件的有效期,但实际上这是有缺陷的。如果本地时间改为2118,Expires时间无论如何都会过期。2、Last-Modified:由http1.0推出,指服务器文件的最后修改时间。浏览器会向服务器发送一个带有If-Modified-Since的请求,并与服务器文件修改时间Last-Modified进行比较。如果时间不同,获取数据返回200,否则返回304调用浏览器本地硬盘的缓存。这种方法也有一个问题。如果服务器文件经常修改保存,那么Last-Modified也会经常变化,每次都会从服务器获取,也有http1.1的修改。从网上拿了一个angular.js的地址试了一下。第一次返回200,第二次刷新返回304。时间:本地缓存获取>服务器获取3、Cache-Control:http1.1推出,指的是文件缓存的有效期。1.max-age:单位是s,设置文件的最大缓存时间,用的最多。2.public:缓存可以被多个用户共享。例如,360浏览器可以登录不同的账户,计算机系统可以在不同的账户之间切换。3.private:只有单个用户是私有的,不被多个用户共享。4.no-cache:不会被缓存。5.no-store:不允许存储。4.启动ETaghttp1.1。版本号由服务器随机生成。浏览器会向服务器发送一个带有If-None-Match的请求,并与服务器文件的修改版本ETag进行比较。如果版本号不同,则获取数据。返回200,否则返回304,调用浏览器本地硬盘的缓存。这种方法比Last-Modified更可靠。思考?Cache-Control+Last-Modified+ETag的优先级会发生什么变化?还记得开头那张图吗?因为http1.1>http1.0,所以Cache-Control>Expires,ETag>Last-Modified。根据就近原则,先找到本地缓存,不向服务器发送请求,所以Expires>Last-Modified,Cache-Control>ETag,如果浏览器只支持http1.0,那么浏览器只会携带Last-Modified发送到后台,如果服务器只支持http1.0,那么服务器会以Last-Modified为标准。如果浏览器支持http1.1,浏览器会携带Cache-Control+Last-Modified+ETag发送到后台。如果服务器支持http1.1,服务器会以Cache-Control+ETag为标准。到此结束,请指正!!!