深入Web请求过程
互联网的架构由传统的C/S架构转变为B/S架构。
B/S架构有以下两方面好处:
①客户端使用统一的浏览器
②服务端基于统一的HTTP
B/S架构概述
B/S架构基于统一的应用层协议HTTP来交互数据,HTTP采用无状态的短连接的通信方式,一次请求完成一次数据交互。下图为B/S架构中大多采用的架构设计。
解析:当一个用户在浏览器输入一个网址时,它会请求DNS把这个域名解析成对应的IP地址,然后根据IP地址在互联网上找到对应的服务器,向这个服务器发送请求,服务器再返回数据资源。还有的相关内容:
1、服务器可能有很多台,具体指定哪台服务器来处理请求,需要负载均衡。
2、请求的数据是存储在分布式缓存里还是静态文件,或是数据库中。
3、浏览器解析一些静态资源(CSS、JS、图片)又会发起另外的HTTP请求,这些请求很可能会在CDN服务器上进行处理。
网络架构都要遵守的原则:
1、互联网上所有资源都用一个URL来表示,URL就是统一资源定位符。
2、必须基于HTTP与服务端进行交互。
3、数据展示必须在浏览器中运行。
如何发起一个请求
发起一个HTTP请求相当于建立一个Socket连接,只不过outputStream.write写的二进制字节数据要符合HTTP。浏览器在建立Socket连接之前,必须根据地址栏里输入的URL的域名DNS解析出IP地址,再根据IP地址和默认的80端口与远程服务器建立Socket连接。
发起一个HTTP请求就是建立一个Socket通信的过程。
HTTP解析
DNS域名解析
互联网都是通过URL来发布和请求资源的,而URL中的域名需要解析成IP地址才能与远程主机建立连接。
下图为DNS域名解析的主要请求过程:
当用户在浏览器中输入域名并按下回车键后:
第1步,浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果有,则解析结束。
第2步,如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有DNS解析结果。
其余步骤在上图。
CDN工作机制
CDN也就是内容分布网络(Content Delivery NetWork)
CDN要达到的目标:可扩展、安全性、可靠性、响应和执行。
CDN架构:
CDN的动态加速:在CDN的DNS解析中通过动态的链路探测来寻找回源最好的一条路径。
负载均衡
负载均衡就是对工作任务进行平衡、分摊到多个操作单元上执行,如图片服务器、应用服务器等,共同完成任务。负载均衡是由DNS的解析来完成的。
通常有三种负载均衡架构:链路均衡架构、集群负载均衡和操作系统负载均衡。
集群负载均衡分为:硬件负载均衡和软件负载均衡。
硬件负责均衡性能好,价格昂贵,不能进行动态扩容。
软件负载均衡成本低,使用PC就能搭建,缺点是要经过多次代理服务器,增加网络延时。