【计算机网络】浏览器中的 http 请求响应过程

客户端输入 url 后的相应过程

http 的工作过程通常包括请求和相应两个环节,属于标准的客户端服务器模型( C/S 模型)。客户端发起 http 协议请求,服务器接收到请求后,返回对应的相应。具体过程包括:

  1. url 地址解析:域名解析系统(DNS)解析域名得到访问网站所在主机的 IP 地址。
  • 完整的 url 通常包括模式协议(https)、域名、访问端口、 虚拟目录、文件名部分、参数部分、锚点部分等。
  • 进行 DNS 解析前,会先从浏览器 DNS 缓存查找,一旦找到就完成了解析工程。如果没有找到,接着会从电脑本地的 hosts 文件中查找(最简单的科学上 google 的方法就是通过修改 hosts 文件实现)。一般来说,除非特别指定,否则 hosts 文件是不会存在解析地址的。这时只能向运营商服务器发送解析报文,获取域名对应的 IP 地址。
  • 浏览器向首选 DNS 服务器发起域名解析请求,通过 UDP 协议向 DNS 的 53 端口发起递归请求。先请求本地域名服务器(Local DNS Server)解析,若没找到结果再向根域名服务器(Root Server)发起解析请求,其返回给本地域名服务器一个所查询域的主域名服务器(gTLD Server)地址。
  • 实际生活中访问页面时常常会出现奇奇怪怪的的广告,那么很大可能是运营商 DNS 被劫持,一般通过手动设置 DNS 可以避免。
  1. 构建 http 请求报文:封装的内容包括目标地址以及部分本机信息。
  2. 构建 TCP 包:建立 TCP 连接 (TCP 的三次握手)。
  3. 发送请求命令:成功建立 TCP 连接后,客户机向服务器发送请求。
  • 一般的网站访问会发送 GET 请求。
  • 在实际网络链路上传送数据帧时,还涉及到 ARP(地址解析协议),根据 IP 地址,通过 ARP 广播请求获取目的主机的物理地址(MAC 地址)。
  1. 服务器响应:服务器接收到 http 请求报文,给予相应的响应信息。
  2. 服务器关闭 TCP 连接:通常由 Web 服务器发起关闭 TCP 连接的请求。
  • 从 HTTP 1.1 开始,服务器可以与客户端保持长连接,这取决于服务器的操作。
  • 像网页版微信为了保证实时显示消息,就不会关闭 TCP 连接。
  1. 客户端解析报文:解析 html 代码,对于像 css,js 或者图片这一类静态资源,会发起另外的请求,解析 html之后再客户端屏幕上渲染图形结果。

F5 刷新浏览器:当我们使用 F5 刷新页面时,浏览器会直接向目标 url 发送请求,而不是读取浏览器缓存的数据。

浏览器业务中的 UDP

在 DNS 解析域名的过程中,DNS 服务默认使用 UDP 协议获得查询结果,通常仅当结果超过 512 字节或者进行 DNS 服务器同步时才会使用 TCP 协议。这是因为 DNS 的使用非常频繁,又是基础,响应速度是优先需要考虑的。使用 UDP 可以满足速度上的要求,但同时也引入了类似于 “DNS 攻击” 这类问题。

WebRTC(Web Real-Time Communication)出现之前,DNS 几乎是浏览器唯一使用的基于 UDP 的协议。WebRTC 提供的三大功能中,MediaStream 与网络无关,RTCPeerConnection 和 RTCDataChannel 都是基于 UDP。

Google 正在试验一种新的传输层协议:QUIC(Quick UDP Internet Connections),它的本质是基于 UDP 实现 HTTP,相当于之前的 TCP + TLS。从目前的资料来看,QUIC 可以大幅减少建立连接的时间,这是通过简化握手步骤从而减少 RTT(Round-Trip Time)来实现的。

HTTP 常见状态码

  • 1XX: 指示信息,表示请求已接受,继续处理;
  • 2XX: 成功,表示请求已接受,已处理。常见的是 200;
  • 3XX:重定向,要完成请求必须进行更进一步地操作。例如常见的有 301 永久重定向302 临时重定向。302 重定向的网站会保留原有的网址,而影响搜索引擎的抓取;
  • 4XX:客户端错误,请求有语法错误或请求无法实现。常见的有 400 错误,前后端协议字段不一致;403错误,表示资源不可用,访问被禁止;404 错误,资源不存在;
  • 5XX:服务端错误,无法响应客户端请求。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章