这里先看三张图,然后再具体说下

34696-dpyxljk651.png

98671-8zlkmfg1dlb.png

09109-yr99x4l6e9p.png


第一步 浏览器地址栏输入 URL

在浏览器地址栏中输入内容后按回车键,浏览器首先会检查输入的内容是否是合法的 URL,如果不合法,浏览器会使用默认的搜索引擎去搜索输入的内容,如果合法,会先在浏览器中查找是否有缓存,如果有直接使用缓存,没有则进行下一步。


第二步 DNS 域名解析

在浏览器中找不到缓存后,则会解析 URL 中的域名拿到对应的IP地址,解析时会以这样一个顺序去查找,找到则停止
首先会搜索浏览器自身的 DNS 缓存
如果浏览器自身的缓存里面没有找到,那么浏览器会搜索系统自身的 DNS 缓存
还找不到,就会尝试从 hosts 文件中查找
前面三个都找不到的话,就会通过 DNS 域名服务器解析


第三步 建立 HTTP 连接

浏览器解析 URL 拿到协议,IP 和端口后,通过 TCP 与对应服务器建立连接,这个过程称为 3 次握手,如下图, SYNACK 表示存放在 TCP 的标志位

21968-s6rrcw5e9fc.png

第一次握手:
首先客户端发起请求,带着 SYN=1,表示我想要创建连接
第二次握手:
服务器收到请求后,告诉客户端:我收到了,回复 ACK=1,此时标识位就变为 SYN=1ACK=1
第三次握手:
到第 2 步服务器回复时,理论上就已经创建连接成功了,但为了防止意外,客户端又做了一次确认,告诉服务器我收到你的回复啦,此时只用发送 ACK=1 标志位就可也了
到此 HTTP 连接成功。


第四步 服务器处理和响应请求

连接成功后,TCP 就开始传输数据到服务器端,它会解析 URL 中的路径和相关参数,执行对应的程序,返回处理结果


第五步 浏览器处理响应

浏览器接收服务器的响应并进行处理,比如后端返回一个 HTML 页面,浏览器就会渲染加载显示出来


第六步 HTTP 请求响应完毕

看到这里,一次 HTTP 请求的过程就算完成了,但是还有后续的事要做,请求完成后 HTTP 连接需要断开,不然连着没发挥作用就是浪费资源了


第七步 断开 HTTP 连接

HTTP 建立连接时只能由客户端发起,而断开时可以由客户端和服务器端任意一方发起

35503-j1bsigwuii.png


第一次挥手:
主机 A (可以为客户端或服务器端)向主机 B 发送一个 FIN 标志位,表示我没事做了请求关闭连接
第二次挥手:
主机 B 收到 FIN 后,向主机 A 发送一个 ACK 回复,表示我也没数据发送了,可以关闭连接
第三次挥手:
因为连接是双向的,此时主机 B 也会向主机 A 发送 FIN 标志位,请求客户端关闭连接
第四次挥手:
主机 A 收到主机 B 发送的 FIN 后,向主机 B 发送 ACK 回复,此时主机 B 收到后会关闭连接,主机 A 在长时间等不到主机 B 的回复后,自己也就关闭了连接


以上就是整个 HTTP 请求的全过程了!


文章作者: Runfa Li
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Linux 小白鼠
网络 Linux Linux 网络 三次握手 四次挥手 tcp/ip url http dns
觉得文章不错,打赏一点吧,1分也是爱~
打赏
微信 微信
支付宝 支付宝