HTTP缓存
HTTP缓存是指浏览器或代理服务器在本地缓存HTTP请求和响应的过程。当浏览器或代理服务器再次请求相同的资源时,可以直接从本地缓存中获取,而不必再向服务器发送请求,从而提高了网页的加载速度和用户的体验。
强缓存
强缓存是指在第一次请求资源时,服务器返回的响应头中包含了缓存时间,浏览器会将该资源缓存到本地,下次请求该资源时,浏览器会先检查本地缓存是否过期,如果未过期,则直接使用本地缓存,不会向服务器发送请求。
强缓存可以通过设置响应头中的Cache-Control和Expires字段来实现。
- Cache-Control: 用于设置缓存时间和缓存策略,由http1.1提出的缓存策略
- no-cahce:表示资源需要重新验证,不能直接使用缓存,需服务端判断是否使用缓存
- no-store:资源不能被缓存,每次需要重新验证
- max-age:资源在浏览器中的缓存时间,单位是秒
- s-maxage:资源在代理服务器中的缓存时间,单位是秒
- Expires: http1.0的缓存控制字段,可以是相对时间或绝对时间,因时区问题,提出了cache-control
协商缓存
协商缓存是指在浏览器请求资源时,服务器会先判断该资源是否过期,如果未过期,则返回304状态码,告诉浏览器可以使用本地缓存,否则返回200状态码,返回最新的资源。 协商缓存可以通过设置响应头中的Last-Modified和ETag字段来实现。
- Last-Modified:用于设置资源的最后修改时间,浏览器在下一次请求该资源时会将该时间发送给服务器,服务器可以根据该时间判断资源是否过期。
- ETag:用于设置资源的唯一标识符,浏览器在下一次请求该资源时会将该标识符发送给服务器,服务器可以根据该标识符判断资源是否过期。
第二次请求时,客户端带上if-modified-science去判断在某一时间之后资源是否发生过变更
强缓存和协商缓存的优先级
- 强缓存的优先级高于协商缓存 如果资源缓存未过期,浏览器会直接使用本地缓存,不会向服务器发请求,此时不会进行协商缓存。只有当资源的缓存
- Cache-Control的优先级高于Expires Expires字段是HTTP/1.0的缓存控制字段,它指定了资源的过期时间,但是由于它使用的是绝对时间,可能会存在时区不同的问题。Cache-Control字段是HTTP/1.1的缓存控制字段,它可以指定资源的缓存时间和缓存策略,使用的是相对时间,更为灵活和精确。
- ETag的优先级高于与Last-Modified Last-Modified字段是资源的最后修改时间,它可以用于协商缓存,但是由于它只能精确到秒级别,可能存在精度不够的问题。ETag字段是资源的唯一标识符,可以用于协商缓存,它使用的是字符串形式,更为精确和灵活。
强缓存和协商缓存的协同使用
可以协同使用
DNS缓存
- 浏览器首先会检查本地缓存中是否有该域名对应的IP地址,如果有,则直接返回该IP地址,如果没有,浏览器会向本地DNS服务器发送DNS查询请求;
- DNS进行逐级查找,直到找到对应的ip
- 本地DNS服务器将找到的ip返回给浏览器,浏览器根据该ip进行Tcp链接的建立