问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

面试官:你了解HTTP的缓存技术吗?

创作时间:
作者:
@小白创作中心

面试官:你了解HTTP的缓存技术吗?

引用
CSDN
1.
https://blog.csdn.net/scholar_yao/article/details/137013817

HTTP缓存技术是Web开发中一个重要的优化手段,它能够显著提升网站的加载速度和用户体验。本文将详细介绍HTTP缓存的两种实现方式:强制缓存和协商缓存,帮助读者理解其工作原理和具体应用。

缓存技术的使用可以说非常普遍。
举个例子,我们通过浏览器访问某些网站时,如果重复访问同一个页面每次都向服务器发送请求获取数据,这样显然效率和使用体验不是很好,所以浏览器将重复性HTTP请求的数据缓存在本地
HTTP缓存的实现有两种方式,分别是强制缓存协商缓存。

强制缓存

强制缓存是浏览器判断缓存数据是否过期,如果未过期则使用缓存数据;是否使用缓存的决定者是浏览器
强制缓存是使用HTTP请求的响应头部字段实现的,表示资源在客户端缓存的有效期。如果两个字段同时设置的话,Cache-Control的优先级更高。

Cache-Control:相对时间

Expires:绝对时间
强制缓存的具体流程:

浏览器第一次访问服务器中的数据时,服务器响应数据的同时在响应头中通过Cache-Control设置缓存过期的时间。

当浏览器再次请求服务器中该数据时,浏览器会先通过请求数据的时间与Cache-Control中设置的缓存过期时间计算数据是否过期。未过期则直接使用缓存数据,过期则再次请求服务器获取数据。

服务器再次收到请求后会响应数据,同时更新Cache-Control中的缓存过期时间。

协商缓存

协商缓存是浏览器向服务器发送请求获取数据,服务器并不响应数据给浏览器,而是返回给浏览器一个响应状态码304,这个状态码的意思是告诉浏览器可以使用本地缓存的数据;是否使用缓存的决定者是服务器
协商缓存是使用HTTP请求的请求头部和响应头部中的字段实现的。
第一种:

请求头部的If-Modified-Since:请求时携带Last-Modified中的时间。

响应头部的Last-Modified:响应数据的最后一次修改时间。
第二种:

请求头部的If-None-Match:请求时携带Etag中的唯一标识。

响应头部的Etag:响应资源的唯一标识。
第一种是基于时间实现的,第二种是基于响应资源的唯一标识实现的;第二种实现方式可以更好的判断资源是否被修改过,从而避免篡改导致不可靠问题。
如果第一次请求数据后,服务器返回的响应头中同时包含了Last-Modified和Etag两个字段,那么再次请求时请求头也会携带这两个字段的信息,但是Etag的优先级更高。
注意:使用协商缓存前都会先进行强制缓存的判断,只有强制缓存判断数据过期后,才会发起带有协商缓存字段的请求。
使用第一种方式和第二种方式实现协商缓存的流程基本一致,区别就在于缓存过期后,再次请求该数据时请求头部携带的是数据最后一次修改时间还是数据唯一标识,服务器根据携带的内容进行判断并做出响应。
下面是使用第二种方式实现协商缓存的具体流程:

浏览器第一次访问服务器的数据时,服务器返回数据的同时返回一个由该响应数据生成的唯一标识。

浏览器再次请求服务器中的该数据时,会先检查强制缓存是否过期;如果没有过期则使用缓存数据;如果已经过期则向服务器发送HTTP请求,请求头部通过If-None-Match字段携带Etag中的唯一标识。

服务器收到请求后通过If-None-Match中的唯一标识与请求数据生成唯一标识对比;如果一致则返回状态码304;不一致则返回状态码200和请求数据,并在响应头部加上新的Etag唯一标识。

浏览器如果收到状态码304则从缓存获得数据,否则更新缓存的数据。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号