一、简单描述一次Http的请求过程

域名解析 –> 发起TCP的3次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) –> 浏览器对页面进行渲染呈现给用户
参考链接:前端经典面试题: 从输入URL到页面加载发生了什么?https://segmentfault.com/a/1190000006879700

二、从域名的解析开始

HTTP的请求过程_HTTP学习

三、TCP的三次握手

拿到域名对应的IP地址之后,User-Agent(一般是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向服务器的WEB程序(常用的有httpd,nginx等)80端口发起TCP的连接请求。这个连接请求(原始的http请求经过TCP/IP4层模型的层层封包)到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序,最终建立了TCP/IP的连接。
如下图:
HTTP的请求过程_HTTP学习_02
HTTP的请求过程_HTTP学习_03
2个计算机通信是靠协议(目前流行的TCP/IP协议)来实现,如果2个计算机使用的协议不一样,那是不能进行通信的,所以这个3次握手就相当于试探一下对方是否遵循TCP/IP协议,协商完成后就可以进行通信了,当然这样理解不是那么准确。

四、发起Http请求

HTTP的请求过程_HTTP学习_04
小疑问: 上述几种请求方式的区别和特性还没有搞清楚呢?
HTTP的请求过程_HTTP学习_05
HTTP的请求过程_HTTP学习_06
HTTP的请求过程_HTTP学习_07

五、Http响应报文

HTTP的请求过程_HTTP学习_08
HTTP的请求过程_HTTP学习_09
HTTP的请求过程_HTTP学习_10
HTTP的请求过程_HTTP学习_11