HTTP及HTTP缓存机制(前端)

HTTP

HTTP是一种获取网络资源的协议,是Web上获取数据交换的基础。

客户端通常是浏览器,当输入URL时,浏览器发起一个请求,以获取HTML文档,服务端收到请求后,生成相应的HTML文档,返回给浏览器。浏览器解析返回的HTML文档,并根据文档中的资源信息发送其他的请求获取这些资源,例如CSS,js,图片等。浏览器根据这些资源绘制页面。

从输入URL到html 页面加载的详细过程:

  1. 加载资源:
    浏览器根据DNS服务器得到域名的IP地址;
    向这个IP地址的机器发送http请求;
    服务器接收、处理并返回http请求;
    浏览器得到返回内容。
  2. 渲染页面:
    根据 html 结构生成 DOM 树;
    根据 CSS 生成 CSSOM(CSS对象模型);
    将 DOM 和 CSSOM 整合生成 RenderTree(渲染树);
    根据 RenderTree 开始渲染和展示(布局渲染树Layout、绘制渲染树Painting);
    遇到<script>标签时,会执行 并阻塞渲染。
HTTP协议是无状态,有会话的

HTTP协议是无状态的。在同一个连接中,两个成功执行的请求之间是没有关系的。对服务器来说,它并不知道这两个请求来自同一个连接。为了解决这个问题,可以使用cookie和session创建有状态的会话,也可以在请求头中添加token来解决这个问题。

var request  = new XMLHttpRequest();
request.open('GET', '', true);
request.setRequestHeader('Authorization', '');
request.send();
代理服务器

在浏览器和服务器之间可能存在代理服务器,其作用:
(1) 缓存
(2) 过滤,像反病毒扫描
(3)负载均衡,让多个服务器服务不同的请求
(4)对不同资源的权限控制
(5)登录,允许存储历史信息

HTTP缓存机制

比如获取一个html页面,一张图片,一个js文件,都要遵循这个协议。这些文件的特点是不经常变化。将这些不常变化的文件存储起来,对客户端来说是优化用户体验的好方法。

HTTP缓存有多种规则,根据是否需要重新从服务器发起请求来分类:强制缓存对比缓存

已存在缓存数据时,仅强制缓存:

强制缓存

已存在缓存数据时,仅对比缓存:

对比缓存

以上我们会发现两种缓存规则的不同。强制缓存如果生效,不需要再和服务器发生交互,而对比缓存不论是否失效,都需要和客户端发生交互。
两种缓存规则可以同时存在,强制缓存优先级高于对比缓存。当执行强制缓存规则,如果缓存生效,直接使用缓存,不再执行对比缓存规则。

强制缓存

强制缓存机制下,如果缓存数据没有失效,可以直接使用缓存数据,那么浏览器是如何知道缓存数据是否失效呢?
我们知道,在没有缓存数据的时候,浏览器向服务器请求数据时,服务器会将数据和缓存规则一并返回,缓存规则信息会包含在响应的header中。
对于强制缓存,响应的header中,会有两个字段来标明失效规则(Expires/Cache-Control),在开发者工具中,可以看到网络请求的详细信息。

Expires

Expires值为服务器返回的到期时间,即下一次请求的时候,如果请求时间小于Expires值,就直接使用缓存数据。
不过Expires是 HTTP 1.0 的东西,现在浏览器默认使用 HTTP 1.1,所以它的左右基本忽略。
另一个问题是,到期时间是由服务端返回的,客户端的时间跟服务端时间可能有误差,这样会导致缓存命中的误差。
所以,HTTP 1.1 中,使用 Cache-Control 替代。

Cache-Control

Cache-Control常见的取值有private,public,no-cache,max-age,no-store,默认值为private

private    客户端可以缓存
public     客户端和代理服务器都可以缓存
max-age=xxxx   缓存的内容将在xxxx秒后失效
no-cache   需要使用对比缓存来验证缓存数据
no-store   所有内容都不会缓存,强制缓存和对比缓存都不会触发

浏览器获取的时间是客户端的时间,和后端的时间可能存在出入。而且用户可以随意修改客户端的时间。于是,服务器返回了一个绝对时间,所以就返回了Cache-Control: max-age:600(毫秒),浏览器

对比缓存

···
···
···

引申

(1)http header中与缓存有关的key:

Cache-Control:资源可以通过设置Cache-Control这个HTTP header来定义其缓存策略。
Pragma: http1.0字段,Pragma:no-cache, 作用和Cache-Control:no-cache相同。
Expires: http1.0字段,指定缓存的过期时间。
Last-Modified: 资源最后一次的修改时间。
ETag: 唯一标识请求资源的字符串。

(2)缓存协商策略用于重新验证缓存资源是否有效, 有关的key:

If-Modified-Since:缓存校验字段, 值为资源最后一次的修改时间, 即上次收到的Last-Modified值。
If-Unmodified-Since:与If-Modified-Since相同,而处理方式与之相反。
If-Match:缓存校验字段, 值为唯一标识请求资源的字符串, 即上次收到的ETag值。
If-None-Match:与If-Match相同,而处理方式与If-Match相反。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 浅谈浏览器Http的缓存机制 ✦ ✦ ✦ ✦ ✦ ✦ ✦ ✦ 针对浏览器的http缓存的分析也算是老生常谈了,每隔...
    meng_philip123阅读 998评论 0 10
  • 针对浏览器的http缓存的分析也算是老生常谈了,每隔一段时间就会冒出一篇不错的文章,其原理也是各大公司面试时几乎必...
    全端玩法阅读 873评论 0 9
  • 转载:浏览器缓存知识小结及应用 阅读目录 1. 浏览器缓存基本认识 2. 强缓存的原理 3. 强缓存的管理 4. ...
    meng_philip123阅读 1,086评论 4 18
  • 本文内容大多参考《图解HTTP》一书 一. 认识代理服务器 所以讲缓存为什么要先扯代理服务器?别急,让我们看一下一...
    流光号船长阅读 1,898评论 0 10
  • 雨天很适合看看电影,朋友介绍了《一生一世》。女主安然就像她的名字般安然雅淡善良,由高圆圆饰演,以至于让我觉得她就是...
    骊朵阅读 448评论 0 0