一次完整的HTTP请求过程:
1.首先进行域名解析,域名解析具体过程讲一下:
-
浏览器搜索自己的DNS缓存,缓存中维护一张域名与IP地址的对应表;
-
若没有,则搜索操作系统的DNS缓存;
-
若没有,则操作系统将域名发送至本地域名服务器(递归查询方式),本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则,通过以下方式迭代查找:
本地域名服务器向根域名服务器发起请求,根域名服务器返回com域的顶级域名服务器的地址;
本地域名服务器向com域的顶级域名服务器发起请求,返回权限域名服务器地址;
本地域名服务器向权限域名服务器发起请求,得到IP地址;
-
本地域名服务器将得到的IP地址返回给操作系统,同时自己将IP地址缓存起来;
-
操作系统将IP地址返回给浏览器,同时自己也将IP地址缓存起来;
-
至此,浏览器已经得到了域名对应的IP地址。
2.浏览器发起HTTP请求;
3.接下来到了传输层,选择传输协议,TCP或者UDP,TCP是可靠的传输控制协议,对HTTP请求进行封装,加入了端口号等信息;
4.然后到了网络层,通过IP协议将IP地址封装为IP数据报;然后此时会用到ARP协议,主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址,找到目的MAC地址;
5.接下来到了数据链路层,把网络层交下来的IP数据报添加首部和尾部,封装为MAC帧,现在根据目的mac开始建立TCP连接,三次握手,接收端在收到物理层上交的比特流后,根据首尾的标记,识别帧的开始和结束,将中间的数据部分上交给网络层,然后层层向上传递到应用层;
6.服务器响应请求并请求客户端要的资源,传回给客户端;
- 负载均衡:网站可能会有负载均衡设备来平均分配所有用户的请求。即对工作任务进行平衡分摊到多个操作单元上执行,如图片服务器,应用服务器等。
- 请求处理阅读请求及它的参数和 cookies
7.断开TCP连接(四次挥手),浏览器对页面进行渲染呈现给客户端。