浏览器缓存相关知识

122 阅读3分钟

缓存存放

缓存的资源文件存放有两种方式,一种是存放在硬盘中,一种是存放在内存中;

disk cache:存放在硬盘中

memory cache:存放在内存中

区别:硬盘缓存当进程退出或者结束的时候缓存不会被清除,但是读取速度较慢


缓存的作用:

1.减少了冗余的数据传输

2.减少了服务器的负担,大大提升了网站的性能

3.加快了客户端加载网页的速度


缓存分为强制缓存和协商缓存

协商缓存:

通过请求头和响应头的某些字段实现;

第一次请求的时候,服务器会返回一个特殊的字段给客户端,下次请求的时候请求头会带上这个字段,服务端会验证这个字段,如果相同则会返回304状态码,即使用缓存,否则会重新请求

字段分为两种:ETag/if-None-Match 和 Last-Modified/if-Modify-Since

Last-Modified/if-Modify-Since

第一次请求的时候,服务器会返回一个last-modified的header(响应头),内容是该资源最后的修改时间, 当再次发送该请求的时候请求头会带上if-modify-since,值为上次响应头的last-modified,服务器会校验该值是否和当前last-modified相同(当前资源最后修改的时间),如果相同则会返回304状态码,如果不同则返回200,并且更新last-modified

Etag/if-None-Match

原理和上一个字段类似,但是值是字符串或者其他内容。

对比

1. 在精度上,Etag要优先于 last-modified。

  1. 在性能上,Etag要逊于Last-Modified,Last-Modified只需要记录时间,而Etag需要服务器通过算法来计算出一个hash值。

  2. 在优先级上,服务器校验优先考虑Etag。

为什么需要Etag

当某些资源最后修改日期不同但是其内容没有发生变化的时候,可以通过etag判断可以继续使用缓存


强制缓存

浏览器在加载资源的时候,会先根据本地缓存资源的header中的信息(Expires 和 Cache-Control)来判断是否需要强制缓存。如果命中的话,则会直接使用缓存中的资源。否则的话,会继续向服务器发送请求。

Expires

http1.0的规范

值是一个时间字符串,代表该资源的失效时间,如果在失效之前请求该资源的话是直接从缓存中读取,否则会重新向服务器发送请求(缺点是当服务器时间和本地时间不同的时候会失效)

Cache-Control

http1.1规范

利用值max-age进行判断是否失效

max-age=60  表示60秒后该资源失效

出了ma-age字段,还有其他字段:

no-cache:可以在本地缓存,但是每次使用前要同时协商缓存进行校验该缓存是否过期(不是不缓存,而是不缓存过期的资源)

no-store:禁止浏览器缓存数据,每一次都要重新请求资源

public:可以被所有的用户缓存(终端用户和CDN等中间代理服务器)

private: 只能被终端用户的浏览器缓存,不允许 CDN 等中继缓存服务器对其缓存。

**Cache-Control 与 Expires 同时启用的时候 Cache-Control 优先级高。
**

转载:www.cnblogs.com/tugenhua070…

\