Web请求流程

本章博客是介绍web请求会话过程中网络执行的情况,不涉及服务器内部执行流程。话不多说,一起学习吧!

过程概览

  1. 域名解析 (目的:得到服务器IP地址,定位地址)
  2. TCP握手 (目的:建立连接状态)
  3. 发送HTTP请求 (目的:发起请求)
  4. 响应HTTP请求 (目的:得到资源)
  5. TCP挥手 (目的:结束连接状态,此过程和Connection:keep-alive有关,原因详情看下文)
  6. 浏览器解析/渲染资源展现给用户

一、域名解析

  域名解析的目的就是为了拿到目的服务器的IP地址,此过程解析顺序如下:浏览器DNS缓存→操作系统DNS缓存→hosts文件映射→DNS服务器解析。此过程不一定全部执行,只要在某个环节找到IP地址就无需继续进行。

  • 浏览器检查自身的DNS缓存,如果缓存中有,则拿到IP。以谷歌浏览器为例,可以输入chrome://net-internals/#dns来查看缓存,浏览器的DNS缓存有容量上线。
  • 操作系统检查自身的DNS缓存在这里插入代码片以拿到IP,Windows可以在DOS命令中输入ipconfig /displaydns命令来查看系统DNS缓存。
  • hosts文件映射,如果文件中定义了该域名IP映射就可以直接拿到,Windows系统中hosts存在于C:\Windows\System32\drivers\etc目录下。
  • 如果到了第三不也没有找到IP映射关系,浏览器会向本地的DNS服务器发起一个域名解析的请求以得到IP

二、TCP三次握手

 通过wireshark抓包软件可以看到,建立HTTP连接的确是基于TCP三次握手开始


  HTTP是建立在TCP/IP协议之上的应用层协议,浏览器拿到域名对应的IP地址后,就会开始向服务器发起连接的请求,TCP连接要经历三次握手(图片来源于百度):

第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN-SEND状态,等待服务器确认。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN-RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

三、发送HTTP请求

  建立好客户端与服务器的TCP连接以后,就开始HTTP的请求了,此过程在前一章已经讨论过了,再次不做赘述,此过程目的就是客户端发起HTTP请求,告诉服务器自己想要什么资源。

四、响应HTTP请求

  此过程详情在上一章也做了介绍,目的就是得到服务器传回的资源文件。

五、TCP挥手

  此过程稍微有点特殊,并不是所有过程都有此步骤,取决于Connection请求头。在上一章介绍过这个请求头,Connection:keep-alive表示持久连接,也就是说如果客户端在发起HTTP请求时,标明了此头信息,则在服务器响应HTTP完成后,不断开连接,以便于下一次继续传输数据,这也是HTTP1.0所没有的功能。但是并不是有了此头信息就会保持长连接,这也取决于此头信息的配置标准,比如超时时间,连接次数
第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当 然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但此时主动关闭方还可以接受数据。

第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。

第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。

第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手,连接断开。

六、浏览器解析/渲染资源

  浏览器拿到服务器传回的资源后(例如:HTML文件)就会开始解析,构建DOM模型,解析CSS文件渲染模型,解释JS等等,渲染出页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Minor王智

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值