精华内容
下载资源
问答
  • web端有哪些缓存
    千次阅读
    2018-11-05 11:55:16

    对于一个html页面,缓存分3部分,一个是页面内容,一个是css样式,一个是JS文件
    1、进行清除页面内容
    //meta标签清理缓存
    //标签:

    //如果需要在html页面上设置不缓存,这在标签中加入如下语句:

    //用于设定禁止浏览器从本地机的缓存中调阅页面内容 //Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。 //可以用于设定网页的到期时间

    //清除浏览器中的缓存,它和其它几句合起来用,就可以使你再次进入曾经访问过的页面时,浏览器必须从服务端下载最新的内容,达到刷新的效果。

    2、CSS和JS文件

    就是只要在每次修改后改一下版本号即可,这样比较麻烦。 可以通过gulp和webpack工具进行添加版本号。 gulp有个通用与简单项目自动加版本号的方法:安装方法如下 $ npm install gulp-rev-append-all --save-dev

    执行文件gulpfile.js如下

    var rev = require(‘gulp-rev-append-all’);

    gulp.task(‘rev’, function() {
    gulp.src(’./index.html’)
    .pipe(rev())
    .pipe(gulp.dest(’.’));
    });

    更多相关内容
  • 1.清除页面缓存,提供操作手册以及资源文件
  • 1.2 服务器端缓存 1.2.1 代理服务器缓存 1.2.2 CDN缓存 1.2.3 DNS缓存 1.3 浏览器端缓存 1.3.1 浏览器缓存(http缓存) 1.3.2 HTML5离线应用缓存 1.4 web应用层缓存 CDN缓存 DNS缓存 浏览器缓存 1. web缓存的类型 ...

    在本片文章中,将阅读到的内容有:

    1. web缓存的类型
      1.1数据库数据缓存
      1.2 服务器端缓存
      1.2.1 代理服务器缓存
      1.2.2 CDN缓存
      1.2.3 DNS缓存
      1.3 浏览器端缓存
      1.3.1 浏览器缓存(http缓存)
      1.3.2 HTML5离线应用缓存
      1.4 web应用层缓存
    2. 浏览器缓存
    3. CDN缓存
    4. DNS缓存

    1. web缓存的类型

    本小节对大概的类型进行一个分类,剩下的篇幅会选取部分内容进行详细的介绍。

    1.1数据库数据缓存

    Web应用,特别是SNS类型的应用,往往关系比较复杂,数据库表繁多,如果频繁进行数据库查询,很容易导致数据库不堪重荷。为了提供查询的性能,会将查询后的数据放到内存中进行缓存,下次查询时,直接从内存缓存直接返回,提供响应效率。比如常用的缓存方案有memcached等。

    1.2 服务器端缓存

    1.2.1 代理服务器缓存

    代理服务器是浏览器和源服务器之间的中间服务器,浏览器先向这个中间服务器发起Web请求,经过处理后(比如权限验证,缓存匹配等),再将请求转发到源服务器。代理服务器缓存的运作原理跟浏览器的运作原理差不多,只是规模更大。可以把它理解为一个共享缓存,不只为一个用户服务,一般为大量用户提供服务,因此在减少相应时间和带宽使用方面很有效,同一个副本会被重用多次。常见代理服务器缓存解决方案有 Squid等。

    1.2.2 CDN缓存

    CDN(Content delivery networks, 即内容分发网络。)缓存,也叫网关缓存、反向代理缓存。CDN缓存一般是由网站管理员自己部署,为了让他们的网站更容易扩展并获得更好的性能。**浏览器先向CDN网关发起Web请求,网关服务器后面对应着一台或多台负载均衡源服务器,会根据它们的负载请求,动态将请求转发到合适的源服务器上。**虽然这种架构负载均衡源服务器之间的缓存没法共享,但却拥有更好的处扩展性。从浏览器角度来看,整个CDN就是一个源服务器。

    1.2.3 DNS缓存

    1.3 浏览器端缓存
    1.3.1 浏览器缓存(http缓存)
    1.3.2 HTML5离线应用缓存
    本篇对这个内容就不进行详细的介绍,可以参考这篇文章。
    https://www.cnblogs.com/xiaotaiyangye/p/10910353.html
    1.4 web应用层缓存

    2. 浏览器缓存(http缓存)

    2.1 什么是浏览器缓存

    浏览器缓存就是把一个已经请求过的web资源(如html页面,图片,JS,数据)拷贝一份放在浏览器中。缓存会根据进来的请求保存输入内容的副本。当下一个请求到来的时候,如果是相同的URL,浏览器会根据缓存机制决定是直接使用副本响应访问请求还是向源服务器再次发起请求。

    浏览器缓存还分为强缓存和协商缓存。

    2.2 强缓存

    强缓存是利用http的返回头中的Expires或者Cache-Control两个字段来控制的,用来表示资源的缓存时间。

    2.2.1 Expires

    该字段是http1.0时的规范,它的值为一个绝对时间的GMT格式的时间字符串,比如

    Expires:Mon,18 Oct 206623:59:59 GMT。

    这个时间代表着这个资源的失效时间,在此时间之前,即命中缓存。这种方式有一个明显的缺点,由于失效时间是一个绝对时间,所以当服务器与客户端时间偏差较大时,就会导致缓存混乱。

    2.2.2 Cache-Control

    Cache-Control是http1.1时出现的header信息,主要是利用该字段的max-age值来进行判断,它是一个相对时间,比如

    Cache-Control:max-age=3600

    代表着资源的有效期是3600秒。

    cache-control除了该字段外,还有下面几个比较常用的设置值:

    no-cache不使用本地缓存。需要使用协商缓存,先与服务器确认返回的响应是否被更改,如果之前的响应中存在ETag,那么请求的时候会与服务端验证,如果资源未被更改,则可以避免重新下载。
    no-store直接禁止游览器缓存数据,每次用户请求该资源,都会向服务器发送一个请求,每次都会下载完整的资源。
    public可以被所有的用户缓存,包括终端用户和CDN等中间代理服务器。
    private只能被终端用户的浏览器缓存,不允许CDN等中继缓存服务器对其缓存。

    Cache-Control与Expires可以在服务端配置同时启用,同时启用的时候Cache-Control优先级高

    2.3 协商缓存

    协商缓存就是由服务器来确定缓存资源是否可用,所以客户端与服务器端要通过某种标识来进行通信,从而让服务器判断请求资源是否可以缓存访问,这主要涉及到下面两组header字段,这两组搭档都是成对出现的,即第一次请求的响应头带上某个字段(Last-Modified或者Etag),则后续请求则会带上对应的请求字段(If-Modified-Since或者If-None-Match),若响应头没有Last-Modified或者Etag字段,则请求头也不会有对应的字段。·

    2.3.1 Last-Modify/If-Modify-Since

    浏览器第一次请求一个资源的时候,服务器返回的header中会加上Last-Modified,Last-Modified是一个时间,标识该资源的最后修改时间,例如

    Last-Modified: Thu,31 Dec 2037 23:59:59 GMT

    当浏览器再次请求该资源时,request的请求头中会包含If-Modified-Since,该值为缓存之前返回的Last-Modified。服务器收到If-Modified-Since后,根据资源的最后修改时间判断是否命中缓存。

    如果命中缓存,则返回304,并且不会返回资源内容,并且不会返回Last-Modified。

    2.3.2 ETag/If-None-Match

    与Last-Modified/If-Modified-Since不同的是,Etag/If-None-Match返回的是一个校验码。ETag可以保证每一个资源是唯一的,资源变化都会导致ETag变化。服务器根据浏览器发送的If-None-Match值来判断是否命中缓存。

    与Last-Modified不一样的是,当服务器返回304 Not Modified的响应时,由于ETag重新生成过,response header中还会把这个ETag返回,即使这个ETag跟之前的没有变化。

    HTTP1.1中Etag的出现主要是为了解决几个Last-Modified比较难解决的问题:

    • 一些文件也许会周期性的更改,但是他的内容并不改变(仅仅改变的修改时间),这个时候我们并不希望客户端认为这个文件被修改了,而重新GET;
    • 某些文件修改非常频繁,比如在秒以下的时间内进行修改,(比方说1s内修改了N次),If-Modified-Since能检查到的粒度是s级的,这种修改无法判断(或者说UNIX记录MTIME只能精确到秒);
    • 某些服务器不能精确的得到文件的最后修改时间。
    • Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304。

    2.4 强缓存 vs 协商缓存

    在这里插入图片描述

    2.5 浏览器缓存的优点

    • 减少了冗余的数据传输,节省了网费
    • 减少了服务器的负担,大大提升了网站的性能
    • 加快了客户端加载网页的速度

    2.6 用户行为对缓存的影响

    用户在浏览器上的一些操作,会导致缓存受到影响。

    在这里插入图片描述
    2.6.1. 在地址栏中输入网址后按回车或点击转到按钮

    浏览器以最少的请求来获取网页的数据,浏览器会对所有没有过期的内容直接使用本地缓存,从而减少了对浏览器的请求。所以,Expires,max-age标记只对这种方式有效。

    2.6.2. 按F5或浏览器刷新按钮

    浏览器会在请求中附加必要的缓存协商,但不允许浏览器直接使用本地缓存,它能够让 Last-Modified、ETag发挥效果,但是对Expires无效。

    2.6.3. 按Ctrl+F5或按Ctrl并点击刷新按钮

    这种方式就是强制刷新,总会发起一个全新的请求,不使用任何缓存。

    2.7 实际问题运用

    代码更新到线上后用户浏览器不能自行更新,我们不能要求客户在系统更新后都进行一次缓存清理的操作。到底该如何解决呢?

    在资源请求的URL中增加一个参数,比如:js/mian.js?ver=0.7.1。这个参数是一个版本号,每一次部署的时候变更一下,当这个参数变化的时候,强缓存都会失效并重新加载。这样一来,静态资源,部署以后就需要重新加载。这样就比较完美的解决了问题。

    3. CDN缓存

    3.1 什么是CDN缓存

    CDN是指内容分发网络。各地部署多套静态存储服务,本质上是空间换时间,自动选择最近的节点内容,不存在再请求原始服务器,适合存储更新很少的静态内容,文件更新慢。

    用更通俗的话来说,CDN是指一种通过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。

    3.2 CDN缓存使用场景

    在没有CDN的情况下
    在这里插入图片描述
    用户在浏览网站的时候,浏览器能够在本地保存网站中的图片或者其他文件的副本,这样用户再次访问该网站的时候,浏览器就不用再下载全部的文件,减少了下载量意味着提高了页面加载的速度。

    在有CDN的情况下
    在这里插入图片描述
    客户端浏览器先检查是否有本地缓存是否过期,如果过期,则向CDN边缘节点发起请求,CDN边缘节点会检测用户请求数据的缓存是否过期,如果没有过期,则直接响应用户请求,此时一个完成http请求结束;如果数据已经过期,那么CDN还需要向源站发出回源请求(back to the source request),来拉取最新的数据。

    下图是一个比较典型的CDN缓存的应用。
    在这里插入图片描述
    使用第三方的CDN服务:如果想要开源一些项目,可以使用第三方的CDN服务
    使用CDN进行静态资源的缓存:将自己网站的静态资源放在CDN上,比如js、css、图片等。可以将整个项目放在CDN上,完成一键部署。
    直播传送:直播本质上是使用流媒体进行传送,CDN也是支持流媒体传送的,所以直播完全可以使用CDN来提高访问速度。CDN在处理流媒体的时候与处理普通静态文件有所不同,普通文件如果在边缘节点没有找到的话,就会去上一层接着寻找,但是流媒体本身数据量就非常大,如果使用回源的方式,必然会带来性能问题,所以流媒体一般采用的都是主动推送的方式来进行。

    3.3 CDN的组成部分:
    典型的CDN系统由下面三个部分组成:
    分发服务系统: 最基本的工作单元就是Cache设备,cache(边缘cache)负责直接响应最终用户的访问请求,把缓存在本地的内容快速地提供给用户。同时cache还负责与源站点进行内容同步,把更新的内容以及本地没有的内容从源站点获取并保存在本地。Cache设备的数量、规模、总服务能力是衡量一个CDN系统服务能力的最基本的指标。
    负载均衡系统: 主要功能是负责对所有发起服务请求的用户进行访问调度,确定提供给用户的最终实际访问地址。两级调度体系分为全局负载均衡(GSLB)和本地负载均衡(SLB)。全局负载均衡主要根据用户就近性原则,通过对每个服务节点进行“最优”判断,确定向用户提供服务的cache的物理位置。本地负载均衡主要负责节点内部的设备负载均衡
    运营管理系统: 运营管理系统分为运营管理和网络管理子系统,负责处理业务层面的与外界系统交互所必须的收集、整理、交付工作,包含客户管理、产品管理、计费管理、统计分析等功能。

    3.4 CDN的作用

    CDN一般会用来托管Web资源(包括文本、图片和脚本等),可供下载的资源(媒体文件、软件、文档等),应用程序(门户网站等)。使用CDN来加速这些资源的访问。
    (1)在性能方面,引入CDN的作用在于:
    ● 用户收到的内容来自最近的数据中心,延迟更低,内容加载更快
    ● 部分资源请求分配给了CDN,减少了服务器的负载
    (2)在安全方面,CDN有助于防御DDoS、MITM等网络攻击:
    ● 针对DDoS:通过监控分析异常流量,限制其请求频率
    ● 针对MITM:从源服务器到 CDN 节点到 ISP(Internet Service Provider),全链路 HTTPS 通信
    除此之外,CDN作为一种基础的云服务,同样具有资源托管、按需扩展(能够应对流量高峰)等方面的优势。

    3.5 CDN的工作原理

    CDN和DNS有着密不可分的联系,先来看一下DNS的解析域名过程,在浏览器输入 www.test.com 的解析过程如下: (1) 检查浏览器缓存 (2)检查操作系统缓存,常见的如hosts文件 (3)检查路由器缓存 (4)如果前几步都没没找到,会向ISP(网络服务提供商)的LDNS服务器查询 (5)如果LDNS服务器没找到,会向根域名服务器(Root Server)请求解析,分为以下几步
    ● 根服务器返回顶级域名(TLD)服务器如.com,.cn,.org等的地址,该例子中会返回.com的地址
    ● 接着向顶级域名服务器发送请求,然后会返回次级域名(SLD)服务器的地址,本例子会返回.test的地址
    ● 接着向次级域名服务器发送请求,然后会返回通过域名查询到的目标IP,本例子会返回www.test.com的地址
    ● Local DNS Server会缓存结果,并返回给用户,缓存在系统中
    CDN的工作原理
    (1)用户未使用CDN缓存资源的过程:
    1.浏览器通过DNS对域名进行解析(就是上面的DNS解析过程),依次得到此域名对应的IP地址
    2. 浏览器根据得到的IP地址,向域名的服务主机发送数据请求
    3. 服务器向浏览器返回响应数据
    (2)用户使用CDN缓存资源的过程:
    1.对于点击的数据的URL,经过本地DNS系统的解析,发现该URL对应的是一个CDN专用的DNS服务器,DNS系统就会将域名解析权交给CNAME指向的CDN专用的DNS服务器。
    2. CND专用DNS服务器将CND的全局负载均衡设备IP地址返回给用户
    3. 用户向CDN的全局负载均衡设备发起数据请求
    4. CDN的全局负载均衡设备根据用户的IP地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求
    5. 区域负载均衡设备选择一台合适的缓存服务器来提供服务,将该缓存服务器的IP地址返回给全局负载均衡设备
    6. 全局负载均衡设备把服务器的IP地址返回给用户
    7. 用户向该缓存服务器发起请求,缓存服务器响应用户的请求,将用户所需内容发送至用户终端。
    如果缓存服务器没有用户想要的内容,那么缓存服务器就会向它的上一级缓存服务器请求内容,以此类推,直到获取到需要的资源。最后如果还是没有,就会回到自己的服务器去获取资源。

    4. DNS缓存

    4.1 什么是DNS

    全称 Domain Name System ,即域名系统。
    通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)

    有dns的地方,就有缓存。浏览器、操作系统、Local DNS、根域名服务器,它们都会对DNS结果做一定程度的缓存。

    DNS查询过程如下:

    1. 首先搜索浏览器自身的DNS缓存,如果存在,则域名解析到此完成。
    2. 如果浏览器自身的缓存里面没有找到对应的条目,那么会尝试读取操作系统的hosts文件看是否存在对应的映射关系,如果存在,则域名解析到此完成。
    3. 如果本地hosts文件不存在映射关系,则查找本地DNS服务器(ISP服务器,或者自己手动设置的DNS服务器),如果存在,域名到此解析完成。
    4. 如果本地DNS服务器还没找到的话,它就会向根服务器发出请求,进行递归查询。

    参考文章:
    https://blog.csdn.net/toumingyumaohuiyi/article/details/52763989
    https://blog.csdn.net/qq_40968685/article/details/109507853?utm_source=app&app_version=4.16.0
    https://blog.csdn.net/qq_41807489/article/details/90266230
    https://www.cnblogs.com/iceflorence/p/8905825.html

    展开全文
  • 平常开发web应用,难免会遇到一个页面刷新但是仍然停留在旧的页面里头,最新的代码效果没有生效,这个是客户端的缓存。尤其是浏览器。而最近,我遇到一个问题,就是html网页,嵌入到桌面应用里头,当我的页面已经...

    目录

     

    问题

    分析

    缓存

    浏览器缓存

    缓存位置

    1.Service Worker

    2.Memory Cache

    3.Disk Cache

    4.Push Cache

    缓存过程分析

    强缓存

    1.Expires

    2.Cache-Control

    3.Expires和Cache-Control两者对比

    协商缓存

    1.Last-Modified和If-Modified-Since

    2.ETag和If-None-Match

    3.两者之间对比:

    缓存机制优先级

    实际场景应用缓存策略

    1.频繁变动的资源

    2.不常变化的资源

    用户行为对浏览器缓存的影响

    解决缓存

    1、在vue项目中解决

    2、如果是部署在nginx上

    3、如果是部署在Tomcat上

    4、ctrl+f5强制刷新浏览器,这是对于用电脑浏览器的用户来说


    问题

    平常开发web应用,难免会遇到一个页面刷新但是仍然停留在旧的页面里头,最新的代码效果没有生效,这个是客户端的缓存。尤其是浏览器。而最近,我遇到一个问题,就是html网页,嵌入到桌面应用里头,当我的页面已经发生了改变了,但是桌面应用仍然停留在上第一个版本的状态。

    对于前后端分离的应用,这个问题,应该也比较经常出现,表现为:由于vue项目上线后,用户页面异常,打开 F12 显示很多请求出现404,原因大概率在于当前页面使用了浏览器的缓存,请求旧的资源失败

    分析

    上述讲解的问题其实就是缓存应用带来的负面影响。本来缓存的存在有很大的作用的,比如可以提高网页的访问速度,降低服务器的带宽消耗等等。

    但是对于开发而言,因为都是在本地调试,所以觉得这种缓存是多余的。因此通常大家都会采用禁用浏览器缓存的功能。

    比如谷歌浏览器,通过f12打开开发者工具,在NetWork选项卡里头有一个disable cache的功能,选中即可即用缓存。(虽然这个功能好,但是对于用户来讲,其实让每个人都如此去操作显然不切实际)

    另外,如果遇到缓存,还有另外一个手段就是通过ctrl + f5来强刷,去掉缓存。显然,现在不说这个快捷键懂的人有多少,单纯就是懂的f5可以刷新网页的用户也没有很多。所以这个操作也不可取!

    因此,要解决就要从代码自身上解决。应该要让用户都不做什么其他操作,自动可以访问到最新的数据才可以。

    缓存

    浏览器缓存

    缓存可以说是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。

    对于一个数据请求来说,可以分为发起网络请求、后端处理、浏览器响应三个步骤。浏览器缓存可以帮助我们在第一和第三步骤中优化性能。比如说直接使用缓存而不发起请求,或者发起了请求但后端存储的数据和前端一致,那么就没有必要再将数据回传回来,这样就减少了响应数据。

    缓存位置

    从缓存位置上来说分为四种,并且各自有优先级,当依次查找缓存且都没有命中的时候,才会去请求网络。

    • Service Worker
    • Memory Cache
    • Disk Cache
    • Push Cache

    1.Service Worker

    Service Worker 是运行在浏览器背后的独立线程,一般可以用来实现缓存功能。使用 Service Worker的话,传输协议必须为 HTTPS。因为 Service Worker 中涉及到请求拦截,所以必须使用 HTTPS 协议来保障安全。Service Worker 的缓存与浏览器其他内建的缓存机制不同,它可以让我们自由控制缓存哪些文件、如何匹配缓存、如何读取缓存,并且缓存是持续性的

    Service Worker 实现缓存功能一般分为三个步骤:首先需要先注册 Service Worker,然后监听到 install 事件以后就可以缓存需要的文件,那么在下次用户访问的时候就可以通过拦截请求的方式查询是否存在缓存,存在缓存的话就可以直接读取缓存文件,否则就去请求数据。

    当 Service Worker 没有命中缓存的时候,我们需要去调用 fetch 函数获取数据。也就是说,如果我们没有在 Service Worker 命中缓存的话,会根据缓存查找优先级去查找数据。但是不管我们是从 Memory Cache 中还是从网络请求中获取的数据,浏览器都会显示我们是从 Service Worker 中获取的内容。

    2.Memory Cache

    Memory Cache 也就是内存中的缓存,主要包含的是当前中页面中已经抓取到的资源,例如页面上已经下载的样式、脚本、图片等。读取内存中的数据肯定比磁盘快,内存缓存虽然读取高效,可是缓存持续性很短,会随着进程的释放而释放。 一旦我们关闭 Tab 页面,内存中的缓存也就被释放了

    那么既然内存缓存这么高效,我们是不是能让数据都存放在内存中呢?
    这是不可能的。计算机中的内存一定比硬盘容量小得多,操作系统需要精打细算内存的使用,所以能让我们使用的内存必然不多。

    当我们访问过页面以后,再次刷新页面,可以发现很多数据都来自于内存缓存(看size这一栏)

    内存缓存中有一块重要的缓存资源是preloader相关指令(例如<link rel="prefetch">)下载的资源。总所周知preloader的相关指令已经是页面优化的常见手段之一,它可以一边解析js/css文件,一边网络请求下一个资源。

    需要注意的事情是,内存缓存在缓存资源时并不关心返回资源的HTTP缓存头Cache-Control是什么值,同时资源的匹配也并非仅仅是对URL做匹配,还可能会对Content-Type,CORS等其他特征做校验

    3.Disk Cache

    Disk Cache 也就是存储在硬盘中的缓存,读取速度慢点,但是什么都能存储到磁盘中,比之 Memory Cache 胜在容量和存储时效性上

    在所有浏览器缓存中,Disk Cache 覆盖面基本是最大的。它会根据 HTTP Herder 中的字段判断哪些资源需要缓存,哪些资源可以不请求直接使用,哪些资源已经过期需要重新请求。并且即使在跨站点的情况下,相同地址的资源一旦被硬盘缓存下来,就不会再次去请求数据。绝大部分的缓存都来自 Disk Cache,关于 HTTP 的协议头中的缓存字段,我们会在下文进行详细介绍。

    浏览器会把哪些文件丢进内存中?哪些丢进硬盘中?
    关于这点,网上说法不一,不过以下观点比较靠得住:

    • 对于大文件来说,大概率是不存储在内存中的,反之优先
    • 当前系统内存使用率高的话,文件优先存储进硬盘

    4.Push Cache

    Push Cache(推送缓存)是 HTTP/2 中的内容,当以上三种缓存都没有命中时,它才会被使用。它只在会话(Session)中存在,一旦会话结束就被释放,并且缓存时间也很短暂,在Chrome浏览器中只有5分钟左右,同时它也并非严格执行HTTP头中的缓存指令。

    Push Cache 在国内能够查到的资料很少,也是因为 HTTP/2 在国内不够普及。这里推荐阅读Jake ArchibaldHTTP/2 push is tougher than I thought 这篇文章,文章中的几个结论:

    • 所有的资源都能被推送,并且能够被缓存,但是 Edge 和 Safari 浏览器支持相对比较差
    • 可以推送 no-cache 和 no-store 的资源
    • 一旦连接被关闭,Push Cache 就被释放
    • 多个页面可以使用同一个HTTP/2的连接,也就可以使用同一个Push Cache。这主要还是依赖浏览器的实现而定,出于对性能的考虑,有的浏览器会对相同域名但不同的tab标签使用同一个HTTP连接。
    • Push Cache 中的缓存只能被使用一次
    • 浏览器可以拒绝接受已经存在的资源推送
    • 你可以给其他域名推送资源

    如果以上四种缓存都没有命中的话,那么只能发起请求来获取资源了。

    那么为了性能上的考虑,大部分的接口都应该选择好缓存策略,通常浏览器缓存策略分为两种:强缓存和协商缓存,并且缓存策略都是通过设置 HTTP Header 来实现的

    缓存过程分析

    由上图我们可以知道:

    • 浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识

    • 浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器缓存中

    以上两点结论就是浏览器缓存机制的关键,它确保了每个请求的缓存存入与读取,只要我们再理解浏览器缓存的使用规则,那么所有的问题就迎刃而解了,本文也将围绕着这点进行详细分析。为了方便大家理解,这里我们根据是否需要向服务器重新发起HTTP请求将缓存过程分为两个部分,分别是强缓存和协商缓存

    强缓存

    强缓存:不会向服务器发送请求,直接从缓存中读取资源,在chrome控制台的Network选项中可以看到该请求返回200的状态码,并且Size显示from disk cache或from memory cache。强缓存可以通过设置两种 HTTP Header 实现:Expires 和 Cache-Control。

    1.Expires

    缓存过期时间,用来指定资源到期的时间,是服务器端的具体的时间点。也就是说,Expires=max-age + 请求时间,需要和Last-modified结合使用。Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。

    Expires 是 HTTP/1 的产物,受限于本地时间,如果修改了本地时间,可能会造成缓存失效Expires: Wed, 22 Oct 2018 08:41:00 GMT表示资源会在 Wed, 22 Oct 2018 08:41:00 GMT 后过期,需要再次请求。

    2.Cache-Control

    在HTTP/1.1中,Cache-Control是最重要的规则,主要用于控制网页缓存。比如当Cache-Control:max-age=300时,则代表在这个请求正确返回时间(浏览器也会记录下来)的5分钟内再次加载资源,就会命中强缓存。

    Cache-Control 可以在请求头或者响应头中设置,并且可以组合使用多种指令:

    public所有内容都将被缓存(客户端和代理服务器都可缓存)。具体来说响应可被任何中间节点缓存,如 Browser <-- proxy1 <-- proxy2 <-- Server,中间的proxy可以缓存资源,比如下次再请求同一资源proxy1直接把自己缓存的东西给 Browser 而不再向proxy2要。

    private所有内容只有客户端可以缓存,Cache-Control的默认取值。具体来说,表示中间节点不允许缓存,对于Browser <-- proxy1 <-- proxy2 <-- Server,proxy 会老老实实把Server 返回的数据发送给proxy1,自己不缓存任何数据。当下次Browser再次请求时proxy会做好请求转发而不是自作主张给自己缓存的数据。

    no-cache:客户端缓存内容,是否使用缓存则需要经过协商缓存来验证决定。表示不使用 Cache-Control的缓存控制方式做前置验证,而是使用 Etag 或者Last-Modified字段来控制缓存。需要注意的是,no-cache这个名字有一点误导。设置了no-cache之后,并不是说浏览器就不再缓存数据,只是浏览器在使用缓存数据时,需要先确认一下数据是否还跟服务器保持一致。

    no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存

    max-age:max-age=xxx (xxx is numeric)表示缓存内容将在xxx秒后失效

    s-maxage(单位为s):同max-age作用一样,只在代理服务器中生效(比如CDN缓存)。比如当s-maxage=60时,在这60秒中,即使更新了CDN的内容,浏览器也不会进行请求。max-age用于普通缓存,而s-maxage用于代理缓存。s-maxage的优先级高于max-age。如果存在s-maxage,则会覆盖掉max-age和Expires header。

    max-stale:能容忍的最大过期时间。max-stale指令标示了客户端愿意接收一个已经过期了的响应。如果指定了max-stale的值,则最大容忍时间为对应的秒数。如果没有指定,那么说明浏览器愿意接收任何age的响应(age表示响应由源站生成或确认的时间与当前时间的差值)。

    min-fresh:能够容忍的最小新鲜度。min-fresh标示了客户端不愿意接受新鲜度不多于当前的age加上min-fresh设定的时间之和的响应。

    从图中我们可以看到,我们可以将多个指令配合起来一起使用,达到多个目的。比如说我们希望资源能被缓存下来,并且是客户端和代理服务器都能缓存,还能设置缓存失效时间等等。

    3.Expires和Cache-Control两者对比

    其实这两者差别不大,区别就在于 Expires 是http1.0的产物,Cache-Control是http1.1的产物,两者同时存在的话,Cache-Control优先级高于Expires;在某些不支持HTTP1.1的环境下,Expires就会发挥用处。所以Expires其实是过时的产物,现阶段它的存在只是一种兼容性的写法。
    强缓存判断是否缓存的依据来自于是否超出某个时间或者某个时间段,而不关心服务器端文件是否已经更新,这可能会导致加载文件不是服务器端最新的内容,那我们如何获知服务器端内容是否已经发生了更新呢?此时我们需要用到协商缓存策略。

    协商缓存

    协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程,主要有以下两种情况

    • 协商缓存生效,返回304和Not Modified

    协商缓存生效
    协商缓存生效
    • 协商缓存失效,返回200和请求结果

    协商缓存失效

    协商缓存可以通过设置两种 HTTP Header 实现:Last-Modified 和 ETag 。

    1.Last-Modified和If-Modified-Since

    浏览器在第一次访问资源时,服务器返回资源的同时,在response header中添加 Last-Modified的header,值是这个资源在服务器上的最后修改时间,浏览器接收后缓存文件和header;

    浏览器下一次请求这个资源,浏览器检测到有 Last-Modified这个header,于是添加If-Modified-Since这个header,值就是Last-Modified中的值;服务器再次收到这个资源请求,会根据 If-Modified-Since 中的值与服务器中这个资源的最后修改时间对比,如果没有变化,返回304和空的响应体,直接从缓存读取,如果If-Modified-Since的时间小于服务器中这个资源的最后修改时间,说明文件有更新,于是返回新的资源文件和200

    但是 Last-Modified 存在一些弊端:

    • 如果本地打开缓存文件,即使没有对文件进行修改,但还是会造成 Last-Modified 被修改,服务端不能命中缓存导致发送相同的资源
    • 因为 Last-Modified 只能以秒计时,如果在不可感知的时间内修改完成文件,那么服务端会认为资源还是命中了,不会返回正确的资源

    既然根据文件修改时间来决定是否缓存尚有不足,能否可以直接根据文件内容是否修改来决定缓存策略?所以在 HTTP / 1.1 出现了 ETagIf-None-Match

    2.ETag和If-None-Match

    Etag是服务器响应请求时,返回当前资源文件的一个唯一标识(由服务器生成),只要资源有变化,Etag就会重新生成。浏览器在下一次加载资源向服务器发送请求时,会将上一次返回的Etag值放到request header里的If-None-Match里,服务器只需要比较客户端传来的If-None-Match跟自己服务器上该资源的ETag是否一致,就能很好地判断资源相对客户端而言是否被修改过了。如果服务器发现ETag匹配不上,那么直接以常规GET 200回包形式将新的资源(当然也包括了新的ETag)发给客户端;如果ETag是一致的,则直接返回304知会客户端直接使用本地缓存即可。

    3.两者之间对比:

    • 首先在精确度上,Etag要优于Last-Modified。

    Last-Modified的时间单位是秒,如果某个文件在1秒内改变了多次,那么他们的Last-Modified其实并没有体现出来修改,但是Etag每次都会改变确保了精度;如果是负载均衡的服务器,各个服务器生成的Last-Modified也有可能不一致。

    • 第二在性能上,Etag要逊于Last-Modified,毕竟Last-Modified只需要记录时间,而Etag需要服务器通过算法来计算出一个hash值。
    • 第三在优先级上,服务器校验优先考虑Etag

    缓存机制优先级

    强制缓存优先于协商缓存进行,若强制缓存(Expires和Cache-Control)生效则直接使用缓存,若不生效则进行协商缓存(Last-Modified / If-Modified-Since和Etag / If-None-Match),协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,返回200,重新返回资源和缓存标识,再存入浏览器缓存中;生效则返回304,继续使用缓存。具体流程图如下:

    看到这里,不知道你是否存在这样一个疑问:如果什么缓存策略都没设置,那么浏览器会怎么处理?

    对于这种情况,浏览器会采用一个启发式的算法,通常会取响应头中的 Date 减去 Last-Modified 值的 10% 作为缓存时间。

    实际场景应用缓存策略

    1.频繁变动的资源

    Cache-Control: no-cache

    对于频繁变动的资源,首先需要使用Cache-Control: no-cache 使浏览器每次都请求服务器,然后配合 ETag 或者 Last-Modified 来验证资源是否有效。这样的做法虽然不能节省请求数量,但是能显著减少响应数据大小。

    2.不常变化的资源

    Cache-Control: max-age=31536000

    通常在处理这类资源时,给它们的 Cache-Control 配置一个很大的 max-age=31536000 (一年),这样浏览器之后请求相同的 URL 会命中强制缓存。而为了解决更新的问题,就需要在文件名(或者路径)中添加 hash, 版本号等动态字符,之后更改动态字符,从而达到更改引用 URL 的目的,让之前的强制缓存失效 (其实并未立即失效,只是不再使用了而已)。
    在线提供的类库 (如 jquery-3.3.1.min.js, lodash.min.js 等) 均采用这个模式。

    用户行为对浏览器缓存的影响

    所谓用户行为对浏览器缓存的影响,指的就是用户在浏览器如何操作时,会触发怎样的缓存策略。主要有 3 种:

    • 打开网页,地址栏输入地址: 查找 disk cache 中是否有匹配。如有则使用;如没有则发送网络请求。
    • 普通刷新 (F5):因为 TAB 并没有关闭,因此 memory cache 是可用的,会被优先使用(如果匹配的话)。其次才是 disk cache。
    • 强制刷新 (Ctrl + F5):浏览器不使用缓存,因此发送的请求头部均带有 Cache-control: no-cache(为了兼容,还带了 Pragma: no-cache),服务器直接返回 200 和最新内容。

    解决缓存

    解决缓存,其实就是禁止缓存生效。那么根据不用的应用,通常可以采用的方式有以下几种:

    1、在vue项目中解决

     在入口文件index.html添加:

    <meta http-equiv="pragram" content="no-cache">
    
    <meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate">
    
    <meta http-equiv="expires" content="0">

    2、如果是部署在nginx上

    在nginx的配置文件 nginx.config添加:

    location = /index.html {
    
        add_header Cache-Control "no-cache, no-store";
    
    }

    如果是用nginx做反向代理的,这么加

    location = /xx(xx为你的代理的项目名) {
    
        add_header Cache-Control "no-cache, no-store";
    
    }

    如果nginx上有 proxy_cache 的配置,也考虑删掉,这是nginx的服务器缓存

    3、如果是部署在Tomcat上

    tomcat稍微麻烦点,需要开发并配置一个过滤器(Filter),如果你只懂前端,那可能需要找后端的兄弟帮忙了。

    1、首先我们要用java写个过滤器:

    注意:路径要和第三步的配置保持一致

    2、然后我们把这个过滤器打成jar包,名字随便,放在tomcat/lib目录下即可。

    3、最后,我们需要修改配置文件tomcat/conf/web.xml,在末尾</web-app>的上方增加以下代码:

    MyFilter是你给过滤器起的名字,可随便改

    也没有太麻烦,应该大部分同学都能搞定。

    4、ctrl+f5强制刷新浏览器,这是对于用电脑浏览器的用户来说

    强制刷新 (Ctrl + F5):浏览器不使用缓存,因此发送的请求头部均带有Cache-control: no-cache(为了兼容,还带了Pragma: no-cache),服务器直接返回 200 和最新内容。

    展开全文
  • web缓存欺骗攻击

    千次阅读 2021-12-09 13:36:32
    一文弄懂缓存欺骗攻击漏洞

    先来看一个例子,index.php需要登录后才可以看到个人信息,在a浏览器登录后然后访问http://192.168.81.210/web/csrf/source/cors/index.php/123.css切换到b浏览器,访问a浏览器的链接,可以发现不需要经过登录也可以看到个人信息。以上例子就是一个web缓存欺骗攻击

    漏洞介绍

    Web缓存欺骗(Web Cache Deception)是一种新的web攻击方法,包括web框架以及缓存机制等在内的许多技术都会受到这种攻击的影响。攻击者可以使用这种方法提取web用户的私人及敏感信息,在某些场景中,攻击者利用这种方法甚至可以完全接管用户账户。
    Web应用框架涉及许多技术,这些技术存在缺省配置或脆弱性配置,这也是Web缓存欺骗攻击能够奏效的原因所在。
    如果某个用户访问看上去人畜无害、实际上存在漏洞的一个URL,那么该Web应用所使用的缓存机制就会将用户访问的具体页面以及用户的私人信息存储在缓存中。

    背景介绍

    很多网站都会使用web缓存功能来减少web服务器的延迟,以便更快地响应用户的内容请求。为了避免重复处理用户的请求,web服务器引入了缓存机制,将经常被请求的文件缓存起来,减少响应延迟。通常被缓存的文件都是静态文件或者公共文件,如样式表(css)、脚本(js)、文本文件(txt)、图片(png、bmp、gif)等等。通常情况下,这些文件不会包含任何敏感信息。
    有多种方法能够实现缓存,比如,浏览器端也可以使用缓存机制:缓存文件后,一段时间内浏览器不会再次向web服务器请求已缓存的文件。这类缓存与web缓存欺骗攻击无关。实现缓存的另一种方法就是将一台服务器部署在客户端和web服务器之间,充当缓存服务器角色,这种实现方法会受到web缓存欺骗攻击影响。这类缓存有各种表现形式,包括:

    • CDN(Content Delivery Network,内容分发网络)。CDN是一种分布式代理网络,目的是快速响应内容请求。每个客户端都有一组代理服务器为其服务,缓存机制会选择离客户端最近的一个节点来提供服务。
    • 负载均衡(Load balancer)。负载均衡除了能够通过多台服务器平衡网络流量,也能缓存内容,以减少服务器的延迟。
    • 反向代理(Reverse proxy)。反向代理服务器会代替用户向web服务器请求资源,然后缓存某些数据。

    工作过程

    假设我们要访问的某个网站使用了服务器缓存技术,架构如下:
    举个例子,网站(Apache+PHP)配置了一个反向代理服务器(Nginx)作为web缓存。与其他网站类似,这个网站使用了公共文件,如图片、css文件以及脚本文件。这些文件都是静态文件,该网站的所有或绝大部分用户都会用到这些文件,对每个用户来说,此类文件返回的内容没有差别。这些文件没有包含任何用户信息,因此从任何角度来看,它们都不属于敏感文件。
    某个静态文件第一次被请求时,该请求会直接穿透代理服务器。缓存机制没见过这个文件,因此会向服务器请求这个文件,然后服务器会返回文件内容。现在,缓存机制需要识别所接收的文件的类型。不同缓存机制的处理流程有所不同,但在大多数情况下,代理服务器会根据URL的尾部信息提取文件的扩展名,然后再根据具体的缓存规则,决定是否缓存这个文件。
    如果文件被缓存,下一次任何客户端请求这个文件时,缓存机制不需要向服务器发起请求,会直接向客户端返回这个文件。

    利用条件

    1、缓存服务器根据后缀进行缓存
    2、访问xx.php/1.js等不存在的的静态文件,返回对应的xx.php的内容。
    3、受害者必须登录了网站

    利用流程

    当注册的用户成功登入了该网站,会跳转到自己的账户页面index.php,该Nginx反向代理服务器会将css、js、jpg等静态资源缓存到nginx设定的目录下。受害者不小心在浏览器中输入了如下的url:http://victim.com/index.php/123.css, 123.css 并不存在,此时会发什么神奇的事情呢?
    Nginx反向代理服务器发现url以静态文件的扩展名(.css)结尾,由于123.css 不存在,它的缓存机制会将 index.php 缓存到缓存目录中,这时攻击者访问了:http://victim.com/index.php/123.css,之前 缓存的帐户页面便成功返回给了攻击者。
    在这里插入图片描述

    最后贴一个phpstudy的nginx的配置,网上基本所有的文章都只是贴了文字,对于配置都是一笔带过,因为并不是很熟悉nginx的配置,只是勉强配置能复现,配置文件nginx.conf:首先在http模块下添加

    proxy_cache_path D:/Software/PHPStudy/PHPTutorial/nginx/cache levels=1:2 keys_zone=SLoan:500m inactive=10d max_size=10g;
    proxy_temp_path D:/Software/PHPStudy/PHPTutorial/nginx/cache/temp;
    

    然后在server模块下添加了两个location

      location ~ .*\.(gif|jpg|png|css|js)(.*) {
               proxy_pass         http://192.168.81.210:8070;#图中的源服务器地址
               proxy_cache SLoan;#keys_zone的值
               proxy_redirect default;
               proxy_ignore_headers Cache-Control Expires;
               proxy_set_header Host $host;
               #proxy_set_header X-Forwarded-For $remote_addr;
               proxy_cache_valid 200 304 5m;
               proxy_cache_valid any 1m;
               proxy_cache_key $host$uri$is_args$args;
               add_header Nginx-Cache "$upstream_cache_status";
               expires 10d;
               }
             location ~ \.php$ {
    			proxy_pass         http://192.168.81.210:8070;
    			}
    

    参考文章

    https://www.anquanke.com/post/id/86516

    展开全文
  • 为了提升用户在Web访问过程的体验,降低网络带宽成本和减轻服务端负载,文章从Web访问过程中本地浏览器、CDN缓存、服务器等3个层面来设计缓存方案,阐述了Web缓存在网络中的传递过程,深入描述Web缓存的不同策略...
  • 缓存来由 随着互联网系统发展的逐步完善,提高系统的qps[每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准]。,目前的绝大部分系统都增加了缓存机制从而避免请求过多的直接与数据库操作...
  • web缓存原理分析

    千次阅读 2018-03-22 14:29:18
    为什么2月份会停更一个月的博客呢? … 过年是一个原因, ... 上班真的很辛苦, 每天感觉挺累的, 书也好久没有看了, 今天恰逢没有新需求, 项目在提测之际来写下一遍转载的文章, 主要记录一下在各处搜索到的关于web缓存...
  • 在B/S架构的项目中,访问web项目时,往往需要清理浏览器的缓存数据,js ,css 等等。 方法1: 在引用的js ,css ,图片,等文件的url 处加一个变量,生成一个随机数字 <script type="text/javascript" src="&...
  • Web前后端缓存技术

    千次阅读 2018-08-26 15:49:55
    Web缓存技术 一、缓存概述 缓存原本是一个硬件的概念:缓存就是数据交换的缓冲区...在一个Web应用中,应用到缓存的地方很多,主要浏览器缓存,页面缓存,服务器缓存,数据库缓存等。 缓存的作用主要: ...
  • CacheOutput将负责服务器端缓存,并为您设置适当的客户端(响应)标头。 您可以指定以下属性: ClientTimeSpan (对应于CacheControl MaxAge HTTP标头) MustRevalidate (与MustRevalidate HTTP标头相对应-指示...
  • 在浏览器第一次发起请求时,本地无缓存,向web服务器发送请求,服务器起端响应请求,浏览器端缓存。过程如下: 在第一次请求时,服务器会将页面最后修改时间通过Last-Modified标识由服务器发送给客户端,客户端记录...
  • web前端开发缓存问题解决方案

    千次阅读 2018-09-11 14:00:13
    大家在进行web开发时候 都应该遇到过缓存问题  对于 HTML页面 缓存分为 三部分:页面内容缓存问题、css缓存问题、js文件缓存问题 1、页面内容 &lt;meta http-equiv="Expires" content="0&...
  • web前端缓存

    千次阅读 2017-10-15 11:27:32
    说说web缓存 网上关于WEB缓存的文章很多,今天汇总一下。 为什么要用缓存 一般针对静态资源如CSS,JS,图片等使用缓存,原因如下: 请求更快:通过将内容缓存在本地浏览器或距离最近的缓存服务器(如CDN...
  • Web页面浏览器设置JS Cookie缓存

    千次阅读 2019-01-30 15:24:36
    Web浏览器时常需要缓存一些信息,这时候需要用到cookie,Cookie 是一些数据, 存储于你电脑上的文本文件中。当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。 JavaScript 可以使用 ...
  • web缓存的几种方式

    2017-04-06 23:02:37
    1、应用程序实现的动态页面缓存 应用程序吧动态文件生成的html文件缓存到文件服务器,以后用户请求动态文件,直接从文件服务器加载对应的静态缓存的html文件返回给用户。这里面主要节省了动态语言的执行时间和...
  • web 服务器有哪些

    万次阅读 多人点赞 2018-08-27 16:53:49
    什么是web服务器 "网络服务"(Web Service)的本质,就是通过网络调用其他网站的资源。 Web Service架构和云 如果一个软件的主要部分采用了"网络服务",即它把存储或计算环节"外包"...
  • 动态调整不同类别缓存对象的缓存空间,可保证高优先级Web对象的高命中率,而不同类别的Web对象命中率之比保持不变。在服务器实现了基于比例命中率的缓存区分服务。经实验验证,在GDSF,LRU,LFU缓存替换算法下,...
  • 这是一篇知识性的文档,主要目的是为了让Web缓存相关概念更容易被开发者理解并应用于...9. 缓存机制的实现:Web服务器配置; 10. 缓存机制的实现:服务器脚本; 11. 参考文档和深入阅读; 12. 关于本文档;
  • 2、websql这种方式只有较新的chrome浏览器支持,并以一个独立规范形式出现 3、indexDB是一个为了能够在客户端存储可观数量的结构化数据,并且在这些数据上使用索引进行高性能检索的 API 4、Cookie一般网站为了辨别...
  • WEB端与移动端测试区别&总结

    千次阅读 2020-09-04 19:40:52
    我会简单从以下几个方面来阐述 系统架构 抓包工具 UI自动化 接口自动化 性能 兼容 安全 app会更注重的一些方面 1、系统架构 ...WEB端 ...B/S结构,WEB端的前端一般不做端的区分 ...WEB端有个比较
  • web缓存与304

    千次阅读 2017-12-19 11:05:20
    细说缓存与304 写在最前 在平时的前端开发中我们经常会遇到这种操作。明明我代码更新了,咋刷出来还是以前的呢?是不是缓存了?快清下缓存看看!你看页面是304,怪不得没更新!等等很多情况。作者起初也不是很了解...
  • HTTP和Web缓存

    万次阅读 2017-03-03 23:06:12
    App、Web Game逐渐盛行的今天,现代浏览器给我们提供哪些有利于Web缓存、提高访问效率的机制,前端的代码架构又能从哪些方面进行调整,更好的利用Web缓存等问题。 什么是Web缓存 Web缓存是指一个Web...
  • Web缓存

    千次阅读 2015-11-17 15:01:43
    Web缓存的作用与类型 前言&摘要 这段时间的工作内容主要是为一个客户端类型的产品增加文档在线存储和文档在线预览相关特性。由于测试的同事比较细心和专业...虽然以前也一些关于Web缓存的意识,但并没有很系
  • Web端和App端测试区别

    千次阅读 2020-04-28 10:57:59
    从功能的角度,Web端和APP端测试流程基本一致 2.黑盒用例编写角度: 从编写用例方法角度采用等价类,边界值,场景法,错误推测法,流程法,编写基本一致 3.部署角度: Web更新了服务器,客户端也会同步更新 属于B/...
  • Web基础:缓存

    千次阅读 2019-03-06 20:47:47
    使用缓存(cache)的站点会监听客户端向服务器发出的请求,并根据相应的缓存设置保存服务器反馈的数据。 例1: HTML页面、图片等文件。如果用户再次使用相同的URL发送请求,请求不会直接发向服务器,而是通过缓存...
  • 笔者burpsuite的在线安全学院的ssti学习笔记。限于本人水平,笔记质量...#先知社区上师傅翻译的:实战Web缓存中毒 https://xz.aliyun.com/t/2585#toc-21 #原文 https://portswigger.net/blog/practical-web-cache-po...
  • JavaWeb项目中的用户的js缓存问题解决方案问题描述问题分析与解决方案 问题描述 最近在一个项目中遇到一个问题,修改了相应页面的js后部署到生产环境中后,还是用户反映出现错误。也就是说我们更新后的js由于...
  • 说说web缓存

    千次阅读 2016-11-30 10:24:04
    为什么要用缓存一般针对静态资源如CSS,JS,图片等使用缓存,原因如下: 请求更快:通过将内容缓存在本地浏览器或距离最近的缓存服务器(如CDN),在不影响网站交互的前提下可以大大加快网站加载速度。 节省带宽:对于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 235,150
精华内容 94,060
关键字:

web端有哪些缓存