代理ip

>

换ip软件

>

http代理

>

ip代理

您的位置:首页 > 新闻资讯 > 文章内容
Http中的缓存
来源:网连代理 作者:admin 时间:2019-12-11 15:41:11

  前几天某web项目上线,发布后发现页面请求CDN中的静态资源并非最新文件。自然而然的想法便是“加载了客户端缓存的资源文件”。于是打开控制台,查看资源加载情况。截取其中一个静态js文件请求响应头,如下图所示:

Http中的缓存

  此时笔者发现,自己对Http头中的某些字段概念已经不是非常清楚了。

  子曰:“温故而知新,可以为师矣”,故而整理总结写出这篇文章。让我们一起了解Http的缓存吧!

  web缓存

  缓存的产生是为了加快资源加载速度、减少请求数量、从而给用户提供更好的体验。而我们常说的“缓存”是一个非常宽泛的概念。因为缓存的分类非常多,分类方式也多种多样。下图为按照笔者自己的思路整理的web缓存架构:

Http中的缓存

  Web缓存可以分为:服务器缓存、浏览器缓存、数据库缓存。

  在浏览器缓存中按照存储位置划分又可以分为:MemoryCache、DiskCache、serviceWorker。

  service worker是一个脚本,由浏览器在背后默默地运行,独立于web页面。他能够实现应用的离线体验。

  MemoryCache存储于内存中,当关闭tab签,MemoryCache便会清除。

  DiskCache存储在硬盘上。

  三者优先级:

  serviceWorker>MemoryCache>DiskCache

  serviceWorker与MeomeyCache不是本文的重点,因此一笔带过,感兴趣的同学请自行查阅资哦。DiskCache又叫做HttpCache.也就是今天要重点介绍的内容。

  有同学会问了,将cookie,indexDB等归为哪一类呢?在笔者看来cookie,indexDB,localStroge,sessionStorage等等,这些属于浏览器端的存储形式,并且不属于浏览主动的行为,因此暂不列到缓存架构中(这种问题见仁见智啦)。

  Http中的缓存

  http中的缓存分为强缓存和协商缓存,浏览器要从http缓存中取内容时,会先查看强缓存内容,如果强缓存命中,直接返回数据。强缓存未获取到从协商缓存中取。如果协商缓存也没有去到数据就发送网络请求,到资源服务器中取数据。

Http中的缓存

  强缓存

  1.expires

  在http1.0中使用expires标记缓存到期时间,但是使用的是绝对时间(格林尼治时间)。超过这个时间代表资源已经过期了。

  使用绝对时间有一定的问题。首先要保证服务器、客户端时间的准确,如果服务器、客户端时间不准确那么缓存周期自然会受到影响。因此http1.1中使用cache-control:max-age来设置缓存到期时间。并且在max-age与expires并存的情况下expires不生效。

  2.cache-control

  cache-control可用于设置资源的可缓存性,到期时间等信息。可缓存性是指在哪些地方可以对资源进行缓存,具体属性值如下:

  Public:指浏览器经过的任何一个地方都可以进行缓存,包括发起请求的客户端浏览器、中间的代理服务器等。

  private:只可以在发起请求的浏览器中进行缓存

  no-cache:并不是是字面上理解的不缓存,而是指本地可以缓存资源但是需要经过服务器验证,验证通过后,客户端缓存才可以用。

  no-store:本地和代理服务器中都不可以使用缓存。

  到期时间是指缓存的时效,可通过如下属性值进行设置:

  max-age:<seconds>:缓存多少秒之后会过期

  s-maxage:代理服务器中使用,如果与max-age并存将取代max-age

  max-stale:在客户端添加。指即便缓存已经过期了,在多长时间内,仍然可以从缓存中取,不用从原服务器中获取。

  3.应用场景

  在日常应用中服务端往往会为静态资源设置较长的到期时间.

  如:cache-control:max-age=86400(24小时)

  试想,资源内容如果变化如何取得最新的内容呢?目前业界的通用解决方案是在资源后面添加资源的hash值,当资源内容变化时,hash值就会变化。hash值变化,浏览器请求的链接就会变化,浏览器就会认为是新的内容,便会从服务器中重新获取。这就是为什么现在的前端项目中构建出来的静态资源往往是带着hash值的!

  协商缓存

  缓存到期了,并不代表资源内容发生了变化,因此当强缓存到期之后就会到服务端验证资源内容是否改变,如果没有改变还是使用缓存中的内容。这就是协商缓存。协商缓存通过请求头Last-Modified、Etag属性进行验证.

  1.Last-Modified&If-Modified-Since

  Last-Modified代表资源上次的修改时间,请求响应中如果带了Last-Modified参数,那么下次再次请求该资源的时候,客户端就会自动带上If-Modified-Since(值为响应头中Last-Modified的值)。试图告诉服务器上次请求该资源时,这个资源的修改时间是什么时候。此时服务端将对比该时间与服务器中该资源最新修改时间。如果时间一致,则说明客户端缓存的是最新资源,状态码返回304(代表取客户端静态资源)。否则说明资源已经发生了变化,就会返回最新资源内容。

Http中的缓存

  2.Etag&If-Match(或者If-None-Match)

  Etag表示资源的数字签名。资源的修改时间变化了,并不代表资源内容发生了变化。

  如:有一个js文件,先在js文件中增加一个回车,资源修改时间变了。再把该回车删掉,资源修改时间又发生了变化。与原始资源相比文件内容未发生变化,但资源修改时间却变化了,因此说使用资源修改时间进行校验是不严谨的!

  使用Etag的验证过程与Last-Modified基本一致,只是资源的唯一性标识从资源修改时间变为了数据签名(比如该资源的md5码),数据签名相较于修改时间更加严谨一些,请求响应头中带了Etag,下次请求该静态资源时请求头中就会携带If-Match(该值与Etag的值一致),服务器比较两者的数字签名是否一致,如果一致,服务端返回304,直接使用客户端缓存,不一致说明资源已经修改,就返回最新内容。

Http中的缓存

相关文章内容简介
推荐阅读
  • 17 2020-01
    路由器重启换IP怎么操作

    路由器重启换IP怎么操作?偶尔IP被限制了?如何换IP访问?路由器重启能够换IP吗?通常家中的基于PPPOE拨号方式上网的,使用的是动态IP,能够更换IP,接下来一块儿看一看如何路由器重启:

  • 20 2019-11
    互联网工作者为什么离不开代理IP

    互联网时代下,80%的职业都需要用到网络、计算机。对于各类互联网工作者来说,代理IP应用于工作的方方面面,是必不可少的一部分。下面简述几种IP代理应用情况:1、一个前端,在爬取别人

  • 23 2019-10
    Java利用代理IP发送HTTP请求

    大数据时代下,数据采集推动着数据分析,数据分析推动发展。但是在这个过程中会出现很多问题。拿最简单最基础的爬虫采集数据为例,过程中就会面临,IP被封,爬取受限、违法操作等多种

  • 23 2019-07
    Win10系统电脑修改IP地址的方法

    Win10系统电脑IP地址怎么改?如何修改Win10网络的IP地址?下面就给大家分享具体操作步骤。1、在win10系统鼠标右键桌面右下角的网络图标,点击打开网络和internet设置。

  • 26 2019-12
    手机换ip怎么用代理ip软件

    手机换ip怎么用代理ip软件?以前总是电脑需要换ip的,现在手机也用于工作了,那么手机是否能换ip呢?ip类似于于每台计算机上网的一个临时身份证,为什么是临时呢,因为它能换。因此不管

  • 26 2019-09
    代理IP常识:IP地址分类介绍

    IP地址有哪几种类型?这里讨论IPv4,IP地址分成了A类、B类、C类、C类、E类 解释:A类以0开头,网络地址有7位,主机地址有24位,举例:A类地址:0100000 10000000 00000000 00000000,红色部分为网络地址