浏览器中输入URL后会发生什么事情

URL

URL就是由某个协议方案表示的资源的定位标识符,协议方案指的是访问资源所用的协议类型名称。

表示指定的URI,要使用涵盖全部必要信息的绝对URI、绝对URL以及相对URL。相对URL,是指从浏览器中基本的URI处指定的URL。
我们看一下绝对的URI格式。
这里写图片描述
使用http:或https:等协议方案名获取访问资源时要指定协议类型,不区分字母大小,最后附一个冒号。
也可使用data:或javascript:这类指定数据或脚本程序的方案名。

字段 解释
登录信息 指定用户名或密码作为从服务器端获取资源时必要的登录信息,是可选的。
服务器地址 使用绝对的URI必须有需要访问的服务器地址,地址可以是解析的、点分十进制(IPV4)或者是方括号阔起来的IPV6地址名。
服务器端口号 指定服务器连接的网络端口号。是可选的,若用户省略则自动使用默认端口号。
带层次的文件路径 指定服务器上的文件路径来定位指定的资源。
查询字符串 针对已指定的文件路径内的资源,可以使用查询字符串传入任意参数,此项可选。
片段标识符 可以标记出已获取资源中的子资源。是可选项。

浏览器输入URL会做八件事情:

1.DNS域名解析

参考详细内容:DNS域名解析过程

* 在浏览器DNS搜索
* 在操作系统DNS缓存中搜索
* 读取系统hosts文件,查找其中是否有对应的IP
* 向本地配置的首选DNS服务器发起域名解析请求

如果直接询问DNS服务器没有发现该URL对应的IP,就会向它的上级服务器询问,这样一层一层的向上级找,最高可到达根结点,直到找到或者全部找不到位置。

2.建立TCP连接

参考详细内容:TCP三次握手过程
确认好了IP和端口号,则可以向该IP地址对应的服务器的该端口号发起TCP连接请求。

TCP三次握手大致总结为以下几个步骤:
发送端首先发送一个带SYN的数据包给接收方;接收方收到后,回传一个带SYN/ACK的数据包表示传达确认信息。最后发送方再回传一个带ACK的数据包,代表握手结束。

3.发送HTTP请求

参考详细内容:HTTP报头协议
三次握手成功后,开始通讯,根据HTTP协议的要求,组织一个请求的数据包,里面含有请求的资源路径、身份信息等。

请求报文是由请求方法、请求URL、协议版本、可选的请求首部字段和内容实体构成的。
这里写图片描述

4.服务器处理请求

发送请求后,服务器响应请求,将数据返回给浏览器,数据可以是根据HTML协议组织的网页,里面包含页面的布局、文字等,也可以是图片或脚本程序。

响应报文基本上是由版本协议、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主题构成。
这里写图片描述

5.返回响应结果

我们常见的情况,如果资源路径指定的资源不存在,服务器就会返回404错误。还有一些其他的响应码,如下表

HTTP响应码 类别 原因短语
1XX Informational(信息状态码) 接受的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错

6.关闭TCP连接

四次挥手
参考详细内容:四次挥手过程

7.浏览器解析HTML

浏览器按顺序解析html文件,构建DOM树,在解析到外部的css和js文件时,向服务器发起请求下载资源。
若是下载css文件,则解析器会在下载的同时继续解析后面的html来构建DOM树,则在下载js文件和执行它时,解析器会停止对html的解析。便出现了js阻塞问题。
下面这个实例就是HTML DOM Tree。
这里写图片描述

预加载器

当浏览器被脚本文件阻塞时,预加载器(轻量级解析器)会继续解析后面的html,寻找需要下载的资源。若发现有需要下载的资源,预加载器开始接收这些资源。预加载器只能检索HTML标签中的URL,无法检测到使用脚本添加的URL,这些资源要等脚本代码执行才会获取。预解析并不改变DOM树,将这个工作留给主解析过程。

浏览器解析css,形成CSSOM树,当DOM树构建完成后,浏览器引擎通过DOM树和CSSOM树构造树渲染树。渲染树中包含可视节点的样式信息。

8.布局渲染

布局

通过计算得到每个渲染对象在可视区域中的具体位置(大小和位置),是一个递归的过程。

绘制

将计算好的每个像素点信息绘制在屏幕上。

利用DOM和CSSOM构建一个渲染树,布局渲染树,绘制渲染树。

DOM树是由HTML文件中的标签排列组成,渲染树是在DOM树中加入CSS或HTML中的style样式而形成的。渲染树只包含需要显示在页面中的DOM元素,像元素或display属性值为none的元素都不在渲染树中。

在浏览器还没接收到完整的HTML文件时,它就开始渲染页面了,在遇到外部链入的脚本标签或样式标签或图片时,会再次发送http请求重复上述的步骤。在收到CSS文件后对已经渲染的页面重新渲染,加入他们应有样式,图片文件加载完立刻显示在相应位置。在这一过程中可能会出发页面重绘或重排。

猜你喜欢

转载自blog.csdn.net/zwe7616175/article/details/80484905