Web请求过程

264 阅读6分钟

从HTTP结构到DNS解析到CDN架构,了解Web请求的具体过程。

B/S架构的优势

  • 浏览器:
    1. 有效的屏蔽了不同服务器提供商提供给用户使用服务的差异性。
    2. 由于浏览器的交互特性,使得用户使用起来易于上手且可继承性强。
  • 服务端
    1. 基于统一的HTTP,使开发模式简化且规范。

HTTP的结构

与传统的C/S架构的长连接交互模式不同,HTTP采用了无状态的短连接通信方式。一次请求完成一次数据交互,然后断开通信。这样做的原因是为了可以同时服务更多的用户,不可能每次一个用户访问一次就一直保持这个长连接。

  • 基本请求流程

    1. 输入网址:www.xxxx.com这个URL,浏览器请求DNS将其解析成对应的IP地址。
    2. 根据IP地址在互联网上找到对应的服务器。
    3. 向这个服务器发出get请求,服务器返回默认的资源。
  • 一些基本原则

    1. 互联网上的所有资源都要用一个URL表示。URL可理解为一种统一资源定位符。
    2. 必须基于HTTP与服务端进行交互。
    3. 数据的展示需要在浏览器中进行。

其实发起一个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域名解析

  1. 检查缓存中有没有域名解析过的IP地址,有则解析结束,没有则第二步
  2. 查找操作系统缓存中有没有域名解析的结果,有则解析结束,没有则第三步
  3. 操作系统把这个域名发给LDNS(本地域名服务器),这个DNS通常提供一个本地互联网接入的DNS解析服务,很多域名解析过程到这里已经完成了,LDNS承担了主要的域名解析工作。若没有,则第四步
  4. 到根域名服务器进行解析,它返回给LDNS一个顶级域服务器的地址。如.com.cn.org
  5. LDNS向这个顶级域服务器发送请求
  6. 顶级域服务器接收到请求,查找,返回这个域名对应注册的域名服务器,也就是说,域名的解析任务交由域名提供商的服务器来完成
  7. 域名提供商的服务器查询一个存储域名和对应IP的映射表,发给LDNS服务器这个域名和对应的目标IP记录
  8. 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调度,将所有请求调度到所选定的这条路径上进行回源。