| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> web缓存(强制缓存、协商缓存、CDN缓存) -> 正文阅读 |
|
[网络协议]web缓存(强制缓存、协商缓存、CDN缓存) |
文章目录本地缓存中localStorage、sessionStorage、cookie的内容请见 链接 一、HTTP缓存
http缓存都是从第二次请求开始的。第一次请求资源时,服务器返回资源,并在respone header头中回传资源的缓存参数;第二次请求时,浏览器判断这些请求参数,命中强缓存就直接200,否则就把请求参数加到request header头中传给服务器,看是否命中协商缓存,命中则返回304,否则服务器会返回新的资源。 常见的http缓存只能缓存get请求响应的资源 ? 1.1 强缓存
from memory cache代表使用内存中的缓存,from disk cache则代表使用的是硬盘中的缓存,浏览器读取缓存的顺序为memory –> disk。在浏览器中,浏览器会在js和图片等文件解析执行后直接存入内存缓存中,那么当刷新页面时只需直接从内存缓存中读取(from memory cache);而css文件则会存入硬盘文件中,所以每次渲染页面都需要从硬盘读取缓存(from disk cache)。 1. 强制缓存的header属性(Pragma/Cache-Control/Expires)浏览器在请求某一资源时,会先获取该资源缓存的 header 信息,判断是否命中强缓存(cache-control 和 expires 信息),若命中直接从缓存中获取资源信息,包括缓存 header 信息,本次请求根本就不会与服务器进行通信。
cache-control 的常用选项
注意:如果 cache-control 与 expires 同时存在的话,cache-control 的优先级高于 expires 1.2 协商缓存(对比缓存)
当浏览器再次请求该资源时,浏览器向服务器发送请求和资源标识,服务器这时就会去判断当前请求的资源浏览器本次缓存的版本跟服务器里面资源最新的版本是否一致:
资源标识:
(一)Last-Modified
? (二)ETag
(三)对比 Last-Modified 和 ETag优先使用 ETag,原因如下:
? 1.3 HTTP缓存的整个流程? 二、CDN(内容分发网络)我们的电脑访问一个网站的时候,这个网站的服务器可能距离我们十万八千里,越远的距离意味着中间要经过更多的节点,节点之间还可能会发生阻塞和丢包的情况,结果导致我们很久都打不开网页,我们就会选择关闭网页。服务器不知道哪里的用户会来访问,世界上任何角落的用户来访问都得做好准备。按卖东西的思维来说,就是多开分店,服务器也是这个策略,备份多个服务器到世界各地,但这需要场地、网络和人员来维护,因此在世界各地的服务器就形成了一个网络,就做内容分发网络。 关键词:加速加速加速!!!更快的分发用户想要的内容
2.1 分发的内容是什么分发的内容可分为静态内容和动态内容
静态内容不是一直保存在CDN里,源服务器发送文件给 CDN 时可以利用 HTTP 头部的 cache-control,利用缓存机制,CDN 可以知道哪些资源可以保存,哪些不能等 2.2 CDN 分发的流程静态内容CDN 没有网站的源内容,因此源服务器就会把静态内容提前备份给CDN,也叫push,这样在世界各地用户需要访问网页的时候,就近的CDN服务器就会把静态内容提供给用户,不需要每次都去请求源服务器了。 如果源服务器没有把静态内容提前备份给CDN,那当用户访问网页时,CDN就得向源服务器索取相应的静态内容,也就是pull,源服务器还可以让CDN进行备份,CDN得到内容以后再提供给用户,因为有了备份,其他同时做出该请求的用户也可以立刻拿到内容。 动态内容动态内容用CDN来进行分发就很困难了,因为动态内容实会根据每个用户来改变的或者根据每个时间段来变化的,源服务器就很难提前预测到每个用户的动态内容,然后提前push到CDN。如果等用户索取动态内容,CDN再向源服务器索取,这跟直接向服务器请求没有太大差别,CDN提供不了多少加速服务,就没有太大的必要。 但还是有CDN可以提供服务,比如现在要获取动态的时间,有些CDN会提供可以运行在CDN上的接口,让源服务器用这些CDN的接口,而不是源服务器自己的代码,这样用户就可以直接从CDN上获取时间。 CDN的布局相当于无形中给源服务器和用户之间增加了一道墙,用户不再直接访问服务器了,而是通过CDN进行沟通,这样就不用担心恶意的DDos攻击。 2.3 CDN 工作原理CDN网络是在用户和服务器之间增加 Cache 层,主要是通过接管 DNS 实现,将用户的请求引导到 Cache 上获得源服务器的数据,从而降低网络的访问时间。 1. 传统的未加缓存服务的访问过程
2. 使用CDN缓存后的网站的访问过程如上图,是使用CDN缓存后的网络访问流程:
从这个例子可以了解到: ? 2.4 CDN 的安全性和可靠性CDN的出现又导致了攻击者可能攻击 CDN ,CDN宕机了怎么办。 多个CDN服务器布局在各个地方,然后监控CDN 服务器的负载状况,若是某个服务器超载了或宕机了,就会把用户的请求转移到没有超载的CDN服务器这边,以此来平均分配网络流量,也就是负载均衡。 CDN转移这些流量的方法和DNS根服务器的做法有着异曲同工之妙,用的是任播这种技术,使用了任播这种技术后,服务器对外拥有同样的IP地址,如果这个IP地址收到了用户的请求之后,请求就会由距离用户最近的服务器来响应 CDN还会采用TSL/SSL证书来给网站进行保护 ? 2.5 应用CDN应用广泛,支持多种行业、多种场景内容加速,例如:图片小文件、大文件下载、视音频点播、直播流媒体、全站加速、安全加速。
|
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:48:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |