> 文章列表 > HTTP 的工作原理

HTTP 的工作原理

HTTP 的工作原理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、简单 HTTP
  • 二、HTTP 连接
            • 请求 I
            • 请求Ⅱ
  • 持久 HTTP
  • 并执行 HTTP
  • 默认浏览器连接设置
  • 总结

前言

在处理 Web 性能监控或优化时,了解 HTTP 协议的基础知识非常重要。众所周知,网络是建立在该协议之上的,该协议对网页的性能有很大影响。了解 HTTP 的工作原理以及 HTTP 事务中每个组件的含义是解释任何监视服务收集的数据的关键。这篇文章描述了HTTP的基础知识,并且是有关如何诊断性能问题的系列文章的第一篇。

HTTP 数据位于 TCP 协议之上,保证了交付的可靠性,并将大数据请求和响应分解为网络可管理的块。TCP是一种面向“连接”的协议,这意味着当客户端开始与服务器对话时,TCP协议将打开一个连接,HTTP数据将通过该连接可靠地传输,当对话完成时,应关闭该连接。HTTP 协议中的所有数据都以人类可读的 ASCII 文本表示。


一、简单 HTTP

简单的 HTTP 事务是客户端对 HTTP 内容发出单个请求的事务。
在这里插入图片描述

  1. DNS 查找:客户端尝试解析请求的域名。
  2. 客户端将 DNS 查询发送到本地 ISP DNS 服务器。
  3. DNS 服务器使用 IP 地址进行响应以进行 hostname.com
  4. 连接:客户端使用 hostname.com 的 IP 地址建立 TCP 连接
  5. 客户端发送 SYN 数据包。
  6. Web 服务器发送 SYN-ACK 数据包。
  7. 客户端使用 ACK 数据包应答,完成三路 TCP 连接建立。
  8. 发送:客户端将 HTTP 请求发送到 Web 服务器。
  9. 等待:客户端等待服务器响应请求。
  10. Web 服务器处理请求,查找资源,并将响应发送到客户端。客户端从 Web 服务器接收第一个数据包的第一个字节,其中包含 HTTP 响应标头和内容。
  11. 加载:客户端加载响应的内容。
  12. Web 服务器发送设置了 PSH 标志的第二个 TCP 段。
  13. 客户端发送 ACK。(客户端每从主机接收两个段发送一次 ACK)
  14. Web 服务器发送带有 HTTP_Continue 的第三个 TCP 段。
  15. 关闭:客户端发送 FIN 数据包以关闭 TCP 连接。

二、HTTP 连接

当按顺序向服务器发出多个请求并且每个请求建立新连接时,将发生串行 HTTP 连接。这种方法今天很少发生,因为所有现代浏览器都支持与主机的并行连接。但是,当浏览器或服务器仅支持 HTTP 1.0,而不支持 Keep Aalive(或 HTTP 1.0 +)并且第一个请求是阻塞请求(例如内联 JavaScript 请求)时,也可能发生这种情况
在这里插入图片描述

请求 I
  1. DNS 查找:客户端尝试解析请求的域名。
  2. 客户端将 DNS 查询发送到本地 ISP DNS 服务器。
  3. DNS 服务器使用 IP 地址进行响应以 hostname.com
  4. 连接:客户端使用 hostname.com 的 IP 地址建立 TCP 连接
  5. 客户端发送 SYN 数据包。
  6. Web 服务器发送 SYN-ACK 数据包。
  7. 客户端发送 ACK 数据包,完成三路 TCP 连接建立。
  8. 发送:客户端将 HTTP 请求发送到 Web 服务器。
  9. 等待:客户端等待服务器响应请求。
  10. 加载:客户端加载响应的内容。
请求Ⅱ
  1. 连接:客户端使用hostname.com的ip地址建立TCP连接。
  2. 发送:客户端将HTTP请求发送到web服务器。
  3. 等待:客户端等待服务器响应请求。
  4. 加载:客户端加载响应的内容。

持久 HTTP

持久连接允许浏览器/HTTP 客户端对同一主机名的不同对象请求使用相同的连接。HTTP 1.1 协议本身支持持久连接,并且不需要任何特定的 HTTP 标头信息。对于 HTTP 1.0,持久连接通过 Keep-Alive HTTP 标头进行控制。
在这里插入图片描述

  1. DNS查找:客户端尝试解析域名。
  2. 客户端将DNS查询发送到本地ISP(网络服务提供商)DNS(域名服务器)服务器。
  3. DNS服务器使用IP地址进行响应以hostname.com
  4. 连接:客户端使用hostname.com的IP地址建立TCP连接
  5. 客户端发送SYN数据包。
  6. web服务器发送SYN-ACK数据包。
  7. 客户端发送ACK报文,完成三路TCP连接建立。
  8. 发送:客户端将HTTP请求发送到web服务器。
  9. 等待:客户端等待服务器响应请求。
  10. 加载:客户端加载响应的内容。
  11. 发送:客户端HTTP请求发送到web服务器。
  12. 等待:客户端服务器响应请求
  13. 加载:客户端加载响应的内容。

并执行 HTTP

HTTP 1.1 协议使浏览器能够打开多个连接并并行执行 HTTP 请求。(带有 Keep-Alive 的 HTTP1.0 也支持此功能,但实现略有不同。

在此示例中,浏览器从 hostname.com 加载一个 HTML 页面,其中包含两个对 hostname.com 的图像请求和两个对 adserver.com 的请求
在这里插入图片描述
第一个请求完成后,后续请求将并行执行:
在这里插入图片描述

默认浏览器连接设置

以下是每个主机的默认最大连接数的列表,这些连接数可由各种浏览器并行打开。随着新浏览器的发布,限制会随着时间的推移而增加。并行连接越多,网页呈现的速度就越快,但研究表明,它可能有限制——将其设置为 10 不一定会产生更好的结果。
在这里插入图片描述


总结

再见