-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
http缓存 #1
Comments
强缓存强缓存就是利用 强缓存中,普通刷新会忽略,但不会清除它,需要强制刷新,浏览器强制刷新,请求会带上 Expires
例如现在这个网页的 所以这种方式有一个明显的缺点:由于失效的时间是一个绝对时间,所以当服务器与客户端时间偏差较大时,就会导致缓存混乱 如果同时出现 cache-control: max-age=3600 // 表示资源可以被缓存的最长时间为3600s, 会优先考虑max-age
expires: Wed, 20 Apr 2022 01:33:40 GMT
|
http 缓存
http缓存是浏览器在本地磁盘对用户最近请求的文档进行存储,当访问者再次访问同一个页面的时候,浏览器就可以直接从本地磁盘加载文档
其优点有:
浏览器缓存是Web性能优化的重要方式。那么浏览器缓存的过程究竟是怎么样的呢?
在浏览器第一次发起请求时,本地无缓存,向
web
服务器发送请求,服务器响应请求,浏览器缓存Last-modified
标识由服务器发送给客户端,客户端记录修改时间Etag
,发送给客户端浏览器后续再次进行请求时:
浏览器缓存主要分为:
根据上图,再次发送请求时:
浏览器请求某一个资源时,会先获取该资源缓存的
header
信息,根据header
里面的Cache-control
和Expires
来判断是否过期,若没过期,则直接从缓存中获取相关信息,包括缓存的
header
信息,所以此次不会与服务器进行通信;这里判断过期,是强缓存相关若过期了,浏览器则会向服务器发送请求,这个请求会携带第一次请求返回的有关缓存的
header
字段信息If-None-Match
将先前服务器端发送过来的Etag
发送给服务器,服务器会对比这个客户端发过来的Etag
是否与服务器相同,If-None-match
的值设置为false,返回状态304
,客户端继续使用本地缓存,不解析服务器端发过来的数据If-None-match
的值设置为true
,客户端重新解析服务器返回的数据;If-Modified-Since
头将之前服务器发送过来的最后修改的时间戳给服务器,服务器端通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的,则返回最新的内容,若是新的,则返回304,客户端继续使用本地缓存The text was updated successfully, but these errors were encountered: