详解浏览器解析一个URL的全过程

目录

1、浏览器解析url

2、DNS域名解析

3、浏览器获取端口号

4、TCP建立连接

5、发送HTTP请求

6、服务器处理请求

7、返回响应结果

8、关闭TCP连接

9、浏览器加载解析渲染


先概括一下整个过程:

首先,浏览器向本地DNS服务器发送请求,如果本地没有缓存该域名的IP地址,就需要通过递归或迭代的方式向根域名服务器、顶级域名服务器、权威域名服务器发起查询请求,直至返回一个IP地址给浏览器。然后根据该IP地址建立TCP连接,客户端发送HTTP请求,服务器返回报文,关闭TCP连接,再由浏览器进行解析渲染页面,最后TCP四次挥手结束连接(404:服务器找不到请求的页面)

应用层:DNS、HTTP、HTTPS

传输层:TCP

网络层:IP、ARP

1、浏览器解析url

浏览器会对我们输入的url进行解析,主要将其分为下部分:协议、网络地址、资源路径。其中网络地址指示该连接网络上哪一台计算机,可以是域名或者IP地址,可以包括端口号;协议是从该计算机获取资源的方式,常见的是HTTP,HTTPS,FTP等。不同协议有不同的通讯内容格式;资源路径指示从服务器上需要获取资源的具体路径。

这里浏览器对输入的url解析为如下内容:
url:https://mp.csdn.net/mp_blog/creation/editor/119778557
协议:https
网络地址(网站名):mp.csdn.net
资源路径:/mp_blog/creation/editor/119778557

2、DNS域名解析

客户端收到你输入的域名地址后,它首先去找本地的hosts文件,检查在该文件中是否有相应的域名、IP对应关系,如果有,则向其IP地址发送请求,如果没有,再去找DNS服务器。一般用户很少去编辑修改hosts文件。
可以理解ip是你家的具体住址 如南京市建邺区吉庆家园04栋603室

DNS服务器层级如下:

DNS查询的具体步骤如下:
a、从浏览器缓存中查询。浏览器会存储一定时间的DNS记录,操作系统不会告诉浏览器每个DNS记录的保存时限,不同浏览器设置保存时限为一个固定值(不同浏览器情况不同,一般在2-30分钟)。

b、从操作系统缓存中查询。如果浏览器中没有包含想要的缓存记录,那浏览器就会发起操作系统请求,继续查询操作系统缓存

c、从路由器中查询DNS缓存。请求持续发送到你的路由,它通常会有自己的DNS缓存。

d、从ISP中查询DNS缓存。下一个被查询地方是ISP缓存DNS的服务器。

e、域名服务器迭代查询,根据返回的地址逐级向上查询。首先从root域名服务器中查询如.com域名服务器,然后逐步向前查询,.com顶级域名服务器到ruanyifeng的域名服务器。一般来说,.com级别的都已经在缓存中了,所以一般不会进行对root域名服务器的查询。下面给出一张迭代查询的图。

浏览器客户端向本地DNS服务器发送一个含有域名https://mp.csdn.net的DNS查询报文。
本地DNS服务器把查询报文转发到根DNS服务器,根DNS服务器注意到其com后缀,于是向本地DNS服务器返回comDNS服务器的IP地址。
本地DNS服务器再次向comDNS服务器发送查询请求,comDNS服务器注意到其https://mp.csdn.net后缀并用负责该域名的权威DNS服务器的IP地址作为回应。
最后,本地DNS服务器将含有https://mp.csdn.net的IP地址的响应报文发送给客户端。
从客户端到本地服务器属于递归查询,而DNS服务器之间的交互属于迭代查询。
正常情况下,本地DNS服务器的缓存中已有comDNS服务器的地址,因此请求根域名服务器这一步不是必需的。

3、浏览器获取端口号

知道ip地址后,还需要端口号,这样才能知道具体在603室的哪个房间里。http协议默认端口号是80。

4、TCP建立连接

IP和端口都有了,在http消息发送前,需要建立客户端与服务器的TCP链接,也就是进行所谓的三次握手。

TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,
等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,
TCP使用的流量控制协议是可变大小的滑动窗口协议。

TCP三次握手的过程如下:

a、客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。

b、服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。

c、客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。

三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

5、发送HTTP请求

经过三次握手之后,与服务器建立了连接后,就可以向服务器发起请求了。

6、服务器处理请求

请求到达服务器之后,接下来服务器需要响应浏览器的请求。服务器端收到请求后的由web服务器(准确说应该是http服务器)处理请求,诸如Apache、Ngnix、IIS等。web服务器解析用户请求,知道了需要调度哪些资源文件,再通过相应的这些资源文件处理用户请求和参数,并调用数据库信息,最后将结果通过web服务器返回给浏览器客户端。下面以静态渲染的页面为例,ajax渲染不需要在服务器做页面数据写入

7、返回响应结果

在HTTP里,有请求就会有响应,哪怕是错误信息。这里我们同样看下响应报文的组成结构:

在响应结果中都会有个一个HTTP状态码,比如我们熟知的200、301、404、500等。通过这个状态码我们可以知道服务器端的处理是否正常,并能了解具体的错误。
状态码由3位数字和原因短语组成。根据首位数字,状态码可以分为五类:

8、关闭TCP连接

为了避免服务器与客户端双方的资源占用和损耗,
当双方没有请求或响应传递时,任意一方都可以发起关闭请求。

建立一个连接需要三次握手,而终止一个连接要经过四次挥手,这是由TCP的半关闭(half-close)造成的。具体过程如下图所示。

(1) 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
(2) 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
(3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
(4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。

既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。

9、浏览器加载解析渲染

  • 7
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

子木呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值