一个 TCP 连接过程包括了建立连接、传输数据和断开连接三个阶段。
HTTP 协议,正是建立在 TCP 连接基础之上的,属于应用层协议。HTTP 是一种允许浏览器向服务器获取资源的协议,是 Web 的基础。
|
|
HTTP 协议属于应用层协议,用来封装请求的文本信息;并使用 TCP/IP 作传输层协议将它发到网络上,也就是在 HTTP 开始工作之前,浏览器需要通过 TCP 与服务器建立连接。HTTP 的内容传输是通过 TCP 的传输数据阶段来实现的

请求的整体流程(大体版):
a. 域名解析
b. 发起TCP的3次握手
c. 建立TCP连接后发起http请求
d. 服务器端响应http请求,浏览器得到html代码
e. 浏览器解析html代码,并请求html代码中的资源
f. 浏览器对页面进行渲染呈现给用户
|
|
在浏览器网址栏输入:www.baidu.com/index.html,接下来浏览器会完成什么工作呢?
| 1. 构建请求 |
第一步,浏览器会构建请求行信息
GET /index.html HTTP1.1
| 2. 查找缓存 |
发起网络请求之前,浏览器会先在浏览器缓存中查询是否有要请求的文件。有的话,它会拦截请求,返回该资源的副本,并直接结束请求;如果缓存查找失败,就会进入网络请求过程了。
| 3. 准备IP地址和端口 |
如上图所示,可以知道在HTTP网络请求的第一步是和服务器建立TCP连接。建立TCP连接的第一步就是准备好IP地址和端口号。
📌怎么通过URL获取到IP地址和端口呢?
因为计算机是不知道www.baidu.com指向的哪台服务器,这就需要用到DNS(域名解析系统),DNS负责把域名和IP地址做映射关系。当然浏览器也提供DNS数据缓存服务,将已经解析过域名缓存起来,下次查询时就可以直接使用,减少一次网络请求。
有了IP,接下来解释获取端口号了,在没有指定说明的端口情况下,HTTP:80 HTTPS:443
| 4. 等待TCP队列 |
Chrome 有个机制,同一个域名同时最多只能建立 6 个 TCP 连接,超过6个后的请求则进入排队等待状态,否则会直接进入下一步,建立 TCP 连接。
| 5. 建立TCP连接 |
在 HTTP 工作开始之前,浏览器通过 TCP 与服务器建立连接。也就是所谓的“三次握手”。👉Web 中的 TCP/IP 是如何工作的
| 6. 发送HTTP请求 |
TCP连接成功之后,就可以发起HTTP请求了。

首先浏览器会向服务器发送请求行,它包括了请求方法、请求 URI(Uniform Resource Identifier)和 HTTP 版本协议。
常用的请求方法有: Get和Post
比如,直接在浏览器地址栏键入xx站点的域名,这就是告诉服务器要 Get 它的首页资源。
如果使用 POST 方法,那么浏览器还要准备数据给服务器,这里准备的数据是通过请求体来发送。请求头发送其他一些信息,把客户端的一些基础信息告诉服务器。
|
|
HTTP 的请求信息终于被送达了服务器后服务器会根据浏览器的请求信息来准备相应的内容。
| 1. 返回请求 |
可以通过工具curl查看返回的请求数据,命令行工具:
curl -i https://www.baidu.com/

特殊情况:重定向

这也就解释了为什么输入的是 geekbang.org,最终打开的却是 https://www.geekbang.org 了。
| 2. 断开连接 |
服务器向客户端返回了请求数据,它就要关闭 TCP 连接。也就是“四次分手”
注意:若在请求头或者响应头中加入了Connection:Keep-Alive那么 TCP 连接在发送后将仍然保持打开状态。保持 TCP 连接可以省去下次请求时需要建立连接的时间,提升资源加载速度。那么再次于该服务器进行交互就可以直接使用这个TCP连接。但是Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。
keep-alive:从HTTP/1.1起,浏览器默认都开启了Keep-Alive,保持连接特性,客户端和服务器都能选择随时关闭连接,则将其设置为connection:close。(比如在完成某个任务之后将其关闭)
|
|

本文详细阐述了HTTP协议的工作原理,及其与TCP协议之间的关系。从域名解析到TCP的三次握手,再到HTTP请求的发送与接收,直至最后的TCP连接断开,全面解析了浏览器与服务器之间的通信过程。
277

被折叠的 条评论
为什么被折叠?



