没有使用CDN的情况下,用户从浏览器输入地址,依次经过浏览器缓存、操作系统缓存(如本地host文件)、域名解析服务器、根域名解析服务器、顶级域名服务器直到找到对应的ip地址返回给用户,用户向该地址发起请求;
使用了CDN的情况下,用户在浏览器中输入要访问的域名,浏览器向DNS服务器请求对域名进行解析。由于CDN对域名解析进行了调整,DNS服务器会最终将域名的解析权交给CNAME指向的CDN专用DNS服务器。
1、CDN的DNS服务器将CDN的负载均衡设备IP地址返回给用户。
2、用户向CDN的负载均衡设备发起内容URL访问请求。
3、CDN负载均衡设备会为用户选择一台合适的缓存服务器提供服务。选择的依据包括:根据用户IP地址,判断哪一台服务器距离用户最近;根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;查询各个服务器的负载情况,判断哪一台服务器的负载较小。基于以上这些依据的综合分析之后,负载均衡设置会把缓存服务器的IP地址返回给用户。
4、用户向缓存服务器发出请求。
5、缓存服务器响应用户请求,将用户所需内容传送到用户。
1、DNS查询:使用nslookup或者dig等工具查询网站的域名解析结果。如果返回的IP地址与原始主机的IP地址不一致,那么很有可能该网站使用了CDN。
2、响应头:使用浏览器的开发者工具,查看网站的响应头信息。如果响应头中包含类似于"X-Cache","X-CDN"或者"Cache-Control"等字段,那么该网站可能使用了CDN。
3、网络请求路径:通过浏览器的开发者工具,查看网站请求的静态资源(例如图片、CSS、JavaScript等)的URL路径。如果路径中包含类似于"cdn"或者"static"等关键字,那么很有可能该网站使用了CDN。
① 减少网络延迟:CDN在全球各地建立了分布式的服务器节点,将网站的内容缓存到离用户最近的节点。当用户访问网站时,CDN会自动将内容传送到最近的服务器节点,这样可以减少数据在全球范围内传输所需的时间,从而减少网络延迟。
② 节省带宽:由于CDN可以缓存网站的内容,因此当用户访问网站时,CDN会从最近的服务器节点提供内容,而不是从源服务器上提取。这可以减少源服务器的负载,从而节省带宽和服务器资源。
③ 提高网站可用性:当源服务器发生故障或停机时,CDN可以自动将流量重定向到其他可用的服务器节点,从而确保网站的可用性。
1、根据输入的网址解析域名到对应的ip地址,查找顺序:
浏览器缓存、操作系统缓存、路由器缓存、DNS 服务器(记录这域名和ip地址的映射)、根服务器。
2、找到ip地址需要先建立TCP链接
客户端发送 SYN数据包表示请求连接,服务端响应SYN 和 ACK 表示问答,客户端收到后回应一个 ACK数据包表示建立连接成功。
3、发送HTTP请求
完整的请求报文包括请求行(包含请求的方法、url、协议版本)、请求头(浏览器的信息键值对组成)、空行、请求体(请求的数据);
4、服务器处理返回http响应报文
5、(解析DOM)浏览器收到html文件,浏览器会将收到的字节内容、转为字符、token化、转为节点对象,将对象链在一起形成文本对象模型也就是DOM
6、遇到link标签加载css,同时继续解析DOM
7、接收到css文件后通用需要把字节转为字符、token化生产CSSOM
8、如果遇到script标签,下载对应的脚本,CSSOM构建完成后才会执行JS的内容,因为JS即可以操作DOM又可以操作CSSOM,所以需要等js加载完成后再生产渲染树
8、匹配DOM和CSSOM节点,生成渲染树
9、获取节点树的结构、位置、大小、依据盒模型布局
10、将渲染树以像素的形式绘制,呈现网页
cookie 用户第一次登录请求时服务端在响应头设置set-cookie,浏览器发送请求并携带cookie,服务器验证cookie正确正常响应。
session 用户第一次登录请求时服务端创建一个session,并将sessionId设置在响应头set-cookie给客户端,客户端发送请求并携带cookie,服务端通过sessionId找session,验证正确正常响应。
token 用户第一次登录请求时服务端生产token,token中带有用户id,客户方发送请求时将token放在请求头中,服务端获取到token校验通过后正常响应。
三者的区别:
1、cookie 存储在客户端,大小4KB,不够安全;
2、session 存储在服务端 无大小限制 更安全,但是消耗服务器资源;
3、token 都可以存储,体积小,只存了用户id相对安全,需要根据id查找用户信息速度慢;
持续完补充中…欢迎大佬指正