美文网首页
HTTP缓存

HTTP缓存

作者: 一瓣山河 | 来源:发表于2019-01-14 22:49 被阅读13次

浏览器缓存

浏览器缓存(Brower Caching)是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问者再次访问同一页面时,浏览器就可以直接从本地磁盘加载文档。

浏览器缓存的优点有:

1. 减少了冗余的数据传输,节省流量

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

3. 加快了浏览器端加载网页的速度

cookie是浏览器本地存储数据的一种方式,一般用来帮助客户端和服务端通信,用于校验身份,结合服务端的session使用;在同域名下发送请求时,浏览器会默认带上本地的cookie。

浏览器缓存分为两种类型:强缓存(也叫本地缓存)、弱缓存(协商缓存)。

强缓存

强缓存,在请求资源时直接从缓存中捞取资源,并不发出实际的http请求。"200 from cache" 就是强缓存。

强缓存相关的header字段

与强缓存相关的header字段有两个:  Expires,Cache-Control

1. Expires 是http1.0规范里的字段,Expires=时间,该时间是缓存的截止时间,它的值是一个绝对时间的GMT格式的时间字符串,如: 

Expires字段格式

如果发送请求的时间在Expires之前,那么本地缓存始终有效,否则就会发送请求到服务器来获取资源。

2. Cache-Control:max-age=number[单位:秒],这是http1.1规范里header信息。它是一个相对值,如Cache-Control: max-age=3600,是指缓存有效期是3600秒。资源第一次的请求时间和Cache-Control设定的有效期,计算出一个资源过期时间,再拿这个过期时间跟当前的请求时间比较,如果请求时间在过期时间之前,则命中缓存,否则就不行;另外“max-age=0”的时候,浏览器不使用缓存,而是发送请求到服务器协商缓存。

cache-control除了该字段外,还有以下几个常用的值:

no-cache:不使用本地缓存。no-cache 并不是单纯的不要缓存,而是防止使用过期的缓存资源,需要使用缓存协商。在使用no-cache的时候,浏览器都要发送请求(携带E-Tag和Last-Modified),与服务器确认返回的响应是否被更改,如果之前的响应中存在ETag,那么请求的时候会与服务端验证,如果资源未被更改,则可以避免重新下载。。

no-store:直接禁止游览器缓存数据,每次用户请求该资源,都会向服务器发送一个请求,每次都会下载完整的资源。

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

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

注意:如果cache-control与expires同时存在,cache-control的优先级要高于expires。

弱缓存

弱缓存,又称协商缓存。协商缓存都是由服务器来确定缓存资源是否可用的,这主要涉及到下面两组header字段,这两组搭档都是成对出现的,即第一次请求的响应头带上某个字段(Last-Modified或者Etag),则后续请求则会带上对应的请求字段(If-Modified-Since或者If-None-Match),若响应头没有Last-Modified或者Etag字段,则请求头也不会有对应的字段

1. Last-Modified/If-Modified-Since

二者的值都是GMT格式的时间字符串,具体过程

    a. 浏览器第一次跟服务器请求一个资源,服务器在返回这个资源的同时,在respone的header加上Last-Modified的header,这个header表示这个资源在服务器上的最后修改时间

    b. 浏览器再次跟服务器请求这个资源时,在request的header上加上If-Modified-Since的header,这个header的值就是上一次请求时返回的Last-Modified的值

    服务器再次收到资源请求时,根据浏览器传过来If-Modified-Since和资源在服务器上的最后修改时间判断资源是否有变化,如果没有变化则返回304 Not Modified,但是不会返回资源内容;如果有变化,就正常返回资源内容。当服务器返回304 Not Modified的响应时,response header中不会再添加Last-Modified的header,因为既然资源没有变化,那么Last-Modified也就不会改变,这是服务器返回304时的response header

浏览器收到304的响应后,就会从缓存中加载资源

如果协商缓存没有命中,浏览器直接从服务器加载资源时,Last-Modified的Header在重新加载的时候会被更新,下次请求时,If-Modified-Since会启用上次返回的Last-Modified值

2. Etag/If-None-Match

    这两个值是由服务器生成的每个资源的唯一标识字符串,只要资源有变化就这个值就会改变;其判断过程与Last-Modified/If-Modified-Since类似,与Last-Modified不一样的是,当服务器返回304 Not Modified的响应时,由于ETag重新生成过,response header中还会把这个ETag返回,即使这个ETag跟之前的没有变化。

links:

缓存字段解释 https://www.cnblogs.com/_franky/archive/2011/11/23/2260109.html

相关文章

  • HTTP缓存原理

    什么是HTTP缓存 HTTP缓存通常指浏览器缓存,基于HTTP中header字段实现HTTP缓存分为强缓存和协商缓...

  • 前端缓存

    前端缓存 前端缓存主要是分为HTTP缓存和浏览器缓存。其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务...

  • 前端缓存详解

    一、前言 前端缓存主要是分为HTTP缓存和浏览器缓存。其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务...

  • PWA笔记一:Web的万物基础缓存

    前言 这里讨论的缓存包括两种,一种是HTTP缓存,一种是Service Worker缓存。 HTTP缓存 HTTP...

  • 前端缓存的理解 或者 前端数据持久化的理解(强制缓存、协商缓存)

    前端缓存分为HTTP缓存和浏览器缓存 其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务器代码上设置;而...

  • http缓存和各个版本差异理解

    http缓存我们可以通过设置http头部属性来对资源进行缓存,资源缓存分为强制缓存和协商缓存 强制缓存expire...

  • http缓存

    http缓存分为强制缓存和对比缓存 强制缓存时, 客户端先判断本地缓存是否有效(http/1.1通过Cache-C...

  • HTTP缓存

    缓存控制Cache-Control Cache-Control是Web性能优化的一种,能加速HTTP请求与响应。 ...

  • http缓存

    来源: 《http权威指南》学一个东西,怎么去学习呢?这分为三个步骤,是什么, 为什么, 怎么做?文章我会着重讲怎...

  • Http缓存

    参考文章:http://oohcode.com/2015/05/28/http-cache/ 客户端 头字段: C...

网友评论

      本文标题:HTTP缓存

      本文链接:https://www.haomeiwen.com/subject/abesdqtx.html