这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战 !
输入URL到回车后发生了什么呢?
具体有下面这些操作
- URL解析
- DNS 查询
- TCP 连接
- HTTP 请求
- 响应请求
- 页面渲染
详情
URL解析
首先浏览器判断你输入的是一个合法的URL 还是一个待搜索的关键词,并且根据你输入的内容进行对应操作。
URL 遵守一种标准的语法,它由协议、主机名、域名、端口、路径、以及文件名这六个部分构成,其中端口可以省略。具体语法规则如下:
在上述语法规则中,https 表示协议,host 表示主机名,juejin 表示域名,8080 表示端口(可以省略),path 表示文件的路径,filename 表示文件名称。
DNS查询
(DNS查询过程也是一个重点,篇幅有限,这里不展开讲了,接下来会写篇文章复习说明)
查询过程如下图所示:
TCP连接
(具体关于TCP/IP协议之前文章写过,就不详谈了) 确定目标服务器服务器的IP地址后,则经历三次握手建立TCP连接
HTTP 请求
当建立tcp连接之后,就可以在这基础上进行通信,浏览器发送 http 请求到目标服务器。请求的内容包括: 请求行、请求头部、空行和请求数据4个部分。
-
请求行
请求行分为三个部分:请求方法、请求地址URL和HTTP协议版本,它们之间用空格分割
请求方法
大致有:GET、POST、DELETE、PUT...
具体请看:
- 请求头部
请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔
- 请求数据
请求数据不在GET方法中使用,而在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最长使用的请求头部是Cntent-Type和Content-Length
响应请求
当服务器接收到浏览器的请求之后,就会进行逻辑操作,处理完成之后返回一个HTTP响应消息,包括:
-
状态行
由协议版本号, 状态码, 状态消息 三部分组成
(状态码不展开说了,也是面试一个重要问题)
-
响应头
用来说明客户端要使用的一些附加信息
-
空行
消息报头后面的空行是必须的
-
响应正文
服务器返回给客户端的文本信息
当页面关闭之后,tcp链接则会经过四次挥手完成断开
页面渲染
当浏览器接收到服务器响应的资源后,首先会对资源进行解析:
- 查看响应头的 Content-Type的值,根据不同的资源类型采用不同的解析方式
- 查看响应头的信息,根据不同的指示做对应处理
关于页面的渲染过程如下:
- 解析HTML,构建 DOM 树
- 解析 CSS ,生成 CSS 规则树
- 合并 DOM 树和 CSS 规则,生成 render 树
- 布局 render 树( Layout / reflow ),负责各元素尺寸、位置的计算
- 绘制 render 树( paint ),绘制页面像素信息
- 浏览器会将各层的信息发送给 GPU,GPU 会将各层合成( composite ),显示在屏幕上