06 协议视角:如何发起一次请求

Posted by CodingWithAlice on April 21, 2021

06 协议视角:如何发起一次请求

配合<浏览器原理>中的如下博客食用

浏览器原理 - 04 导航流程:从输入url到打开页面发生了什么

  • 总结

    1、HTTP 协议基于底层的 TCP/IP 协议,所以必须要用 IP 地址建立连接

    2、如果不知道 IP 地址,就要用 DNS 协议去解析得到 IP 地址,否则就会连接失败

    3、建立 TCP 连接后会顺序收发数据,请求方和应答方都必须依据 HTTP 规范构建和解析报文

    4、为了减少响应时间,整个过程中的每一个环节都会有 缓存

    5、虽然现实中的 HTTP 传输过程非常复杂,但理论上仍然可以简化成实验里的“两点”模型

wireShark 抓包,在地址栏输入 127.0.0.1 回车

image-20210421145503018

抓包分析(没有 DNS 域名解析过程):

1、通过浏览器输入的 IP 以及默认 80 端口,依照 TCP 协议,使用三次握手和 WEB 服务器建立连接

  • 从图中可以看出,浏览器 使用的端口是 52085服务端 使用的端口是 80,经过 SYNSYN/ACKACK 的三个包之后,浏览器和服务器的 TCP 连接就建立了

2、有了 TCP 连接通道,浏览器就会按照 HTTP 协议,通过 TCP 发送一个 GET / HTTP/1.1 的报文

3、Web 服务器收到报文后,会先回复一个 ACK 包,在 TCP 层面确认已收到报文

4、Web 服务器接下来就会按照报文处理请求,根据 HTTP 协议将找到的文件读取出来,并拼接成符合 HTTP 格式的报文 HTTP/1.1 200 OK,底层走的还是 TCP 协议

5、浏览器收到报文后,也会先回复一个ACK

6、浏览器接下来就会解析报文

7、可以注意到后面还有两个来回,4个包 – 是浏览器自动请求了网站图标 favicon.ico,但是服务器没找到

图里 TCP 关闭连接的【四次挥手】在抓包里没有出现,这是因为 HTTP/1.1 长连接特性,默认不会立即关闭连接

image-20210421145614745