美文网首页
输入url后浏览器相关缓存

输入url后浏览器相关缓存

作者: Allan要做活神仙 | 来源:发表于2019-04-03 09:42 被阅读0次

    2019-04-03-9:24
    Atwood's Law

    1、地址栏网址缓存

    比如:之前输入过 jianshu.com,当你输入j 的时候,浏览器地址栏会自动出现 jianshu.com

    2、检查 HSTS 预加载列表(TODO:还没仔细看,不太懂,后面空了再补充)

    3、DNS 缓存

    域名解析最少涉及了三个地方的缓存:

    浏览器的 DNS 缓存
    操作系统中的 DNS 缓存
    索操作系统的 hosts 文件(可手动写入的缓存)

    浏览器搜索自己的 DNS 缓存(浏览器维护一张域名与 IP 地址的对应表);如果没有命中,进入下一步;
    搜索操作系统中的 DNS 缓存;如果没有命中,进入下一步;
    搜索操作系统的 hosts 文件( Windows 环境下,维护一张域名与 IP 地址的对应表);如果没有命中,进入下一步;

    4、ARP(地址解析协议)缓存

    • ARP 是一种用以解释地址的协议,根据通信方的 IP 地址就可以反查出对应方的 MAC 地址

    当地址解析协议被询问一个已知 IP 地址节点的 MAC 地址时,先在 AR 缓存中查看,若存在,就直接返回与之对应的MAC地址;若不存在,才发送 ARP 请求查询。

    5、TCP 发送缓冲区 & 接收缓冲区

    建立 TCP 连接这一步也涉及到缓存 —— 用来临时存放双方通信的数据,保证通信数据不会丢包。

    6、HTTP 请求缓存( CDN 节点缓存、代理服务器缓存、浏览器缓存、后端动态计算结果缓存等 )

    强缓存 ( Cache-Control 和 Expires )

    这里基本都知道,不解释

    协商缓存 ( Last-Modified 和 Etag )

    如果强缓存没有命中,就会发起一个请求到服务器,看协商缓存是否命中,如果命中,请求响应返回http 304,并显示一个Not Modified字符串

    协商缓存是利用【last-Modified, If-Modified-Since】和【ETag、If-None-Match】这两对Header来管理的

    1、Last-Modified,If-Modified-Since

    Last-Modified 表示本地文件最后修改日期,浏览器会在request header加上If-Modified-Since(上次返回的Last-Modified的值),询问服务器在该日期后资源是否有更新,有更新的话就会将新的资源发送回来

    但是如果在本地打开缓存文件,就会造成 Last-Modified 被修改,所以在 HTTP / 1.1 出现了 ETag

    2、ETag、If-None-Match

    Etag就像一个指纹,资源变化都会导致ETag变化,跟最后修改时间没有关系,ETag可以保证每一个资源是唯一的

    If-None-Match的header会将上次返回的Etag发送给服务器,询问该资源的Etag是否有更新,有变动就会发送新的资源回来

    ETag的优先级比Last-Modified

    具体为什么要用ETag,主要出于下面几种情况考虑:

    一些文件也许会周期性的更改,但是他的内容并不改变(仅仅改变的修改时间),这个时候我们并不希望客户端认为这个文件被修改了,而重新GET;
    某些文件修改非常频繁,比如在秒以下的时间内进行修改,(比方说1s内修改了N次),If-Modified-Since能检查到的粒度是s级的,这种修改无法判断(或者说UNIX记录MTIME只能精确到秒);
    某些服务器不能精确的得到文件的最后修改时间。

    image.png

    几种状态码的区别

    200:强缓Expires/Cache-Control存失效时,返回新的资源文件
    200(from cache): 强缓Expires/Cache-Control两者都存在,未过期,Cache-Control优先Expires时,浏览器从本地获取资源成功
    304(Not Modified ):协商缓存Last-modified/Etag没有过期时,服务端返回状态码304

    相关文章

      网友评论

          本文标题:输入url后浏览器相关缓存

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