从HTTP结构到DNS解析到CDN架构,了解Web请求的具体过程。
B/S架构的优势
- 浏览器:
- 有效的屏蔽了不同服务器提供商提供给用户使用服务的差异性。
- 由于浏览器的交互特性,使得用户使用起来易于上手且可继承性强。
- 服务端
- 基于统一的HTTP,使开发模式简化且规范。
HTTP的结构
与传统的C/S架构的长连接交互模式不同,HTTP采用了无状态的短连接通信方式。一次请求完成一次数据交互,然后断开通信。这样做的原因是为了可以同时服务更多的用户,不可能每次一个用户访问一次就一直保持这个长连接。
-
基本请求流程
- 输入网址:www.xxxx.com这个URL,浏览器请求DNS将其解析成对应的IP地址。
- 根据IP地址在互联网上找到对应的服务器。
- 向这个服务器发出
get请求,服务器返回默认的资源。
-
一些基本原则
- 互联网上的所有资源都要用一个URL表示。URL可理解为一种统一资源定位符。
- 必须基于HTTP与服务端进行交互。
- 数据的展示需要在浏览器中进行。
其实发起一个HTTP链接的本质就是建立一个socket通信,只不过在写进二进制字节数据格式要符合HTTP。
HTTP的解析
HTTP的解析主要看HTTP Header,它表达了浏览器的行为和服务端的执行。
先说说Request Header
| header | 解释 |
|---|---|
| Accept | 指定客户端能够接收的内容类型 |
| Accept-Charset | 浏览器可以接受的字符编码集 |
| Accept-Encoding | 指定浏览器可以支持的web服务器返回内容压缩编码类型 |
| Accept-Language | 浏览器可接受的语言 |
| Accept-Ranges | 可以请求网页实体的一个或者多个子范围字段 |
| Authorization | 授权的授权证书 |
| Cache-Control | 指定请求和响应遵循的缓存机制 |
| Connection | 表示是否需要持久连接 |
| Cookie | HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器 |
| Content-Length | 请求的内容长度 |
| Date | 请求发送的日期和时间 |
| Expect | 请求的特定的服务器行为 |
| From | 发出请求的用户的Email |
| Host | 指定请求的服务器的域名和端口号 |
| Range | 只请求实体的一部分,指定范围 |
| User-Agent | User-Agent的内容包含发出请求的用户信息 |
| Via | 通知中间网关或代理服务器地址,通信协议 |
| Warning | 关于消息实体的警告信息 |
再说说Response header
| header | 解释 |
|---|---|
| Server | web服务器软件名称 |
| Expires | 响应过期的日期和时间 |
| Content-MD5 | 返回资源的MD5校验值 |
| Content-Length | 响应体的长度 |
| Content-Location | 请求资源可替代的备用的另一地址 |
| Content-Encoding | web服务器支持的返回内容压缩编码类型 |
| Transfer-Encoding | 文件传输编码 |
| Keep-Alive | 链接保持时间 |
一些常见的状态码:
| 状态码 | 解释 |
|---|---|
| 200 | 客户端请求成功 |
| 302 | 跳转 |
| 400 | 请求有语法错误,服务器无法识别 |
| 403 | 服务器收到请求但拒绝服务 |
| 404 | 请求的资源不存在 |
| 500 | 服务器发生不可预期的错误 |
若页面有异常可能是浏览器的缓存机制,可用Ctrl+F5组合键刷新界面,浏览器会向目标URL发送请求而不使用浏览器自己缓存的数据。但即使如此也可能访问到的是缓存的数据,因为可能在服务器的前端部署了一个缓存服务器。
DNS域名解析
- 检查缓存中有没有域名解析过的IP地址,有则解析结束,没有则第二步
- 查找操作系统缓存中有没有域名解析的结果,有则解析结束,没有则第三步
- 操作系统把这个域名发给LDNS(本地域名服务器),这个DNS通常提供一个本地互联网接入的DNS解析服务,很多域名解析过程到这里已经完成了,LDNS承担了主要的域名解析工作。若没有,则第四步
- 到根域名服务器进行解析,它返回给LDNS一个顶级域服务器的地址。如.com.cn.org
- LDNS向这个顶级域服务器发送请求
- 顶级域服务器接收到请求,查找,返回这个域名对应注册的域名服务器,也就是说,域名的解析任务交由域名提供商的服务器来完成
- 域名提供商的服务器查询一个存储域名和对应IP的映射表,发给LDNS服务器这个域名和对应的目标IP记录
- LDNS服务器将这个域名和对应的目标IP记录,缓存在本地系统缓存中,解析结束。
一些域名解析的方式
- A记录:可将多个域名解析到一个IP地址,但不能讲一个域名解析到多个IP地址
- MX记录:Mail Exchange,可将某个域名下的邮件服务器指向自己的邮件服务器
- CNAME记录:Canonical Name,可以为一个域名设个多个别名
- NS记录:这个域名有指定的DNS服务器进行解析
- TXT记录:为域名设置说明
CDN
CDN:内容分布网络(Content Delivery Network),是一种流量分配网络,在现有网络架构的基础上增加了一次新的架构,使用户可以在网络这就近取得所需的内容。实质就是使用公司自己的DNS解析服务器将这个域名重新CNAME到另一个域名,指向整个CDN中的DNS负载均衡服务器,返回给离这个访问用户最近的CDN节点。
负载均衡
负载均衡(Load Balance)平衡工作任务到多个操作单元执行,最终共同完成工作任务。
负载均衡的架构有链路负载均衡,集群负载均衡,操作系统负载均衡。
-
链路负载均衡:就是将域名通过DNS解析成不同的IP,用户可以根据这个IP访问目标服务器而不需经过其他代理服务器,这样可以加速访问,但如果某台Web Server挂掉,就会出现问题。
-
硬件集群负载均衡:性能好,但是贵,不支持动态扩容。
-
软件集群负载均衡:成本低,易搭建。但有多台代理服务器,增加延时。
-
操作系统负载均衡:操作系统级别中的软中断和硬中断达到负载均衡
CDN动态加速
原理:在CDN的DNS解析中,通过动态链路检测,寻找回源(找到几个对应的CDN节点)最好的一条路径,再通过DNS调度,将所有请求调度到所选定的这条路径上进行回源。