输入 URL到回车后的操作

182 阅读3分钟

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战 !

src=http___www.jisuxia.com_uploadfile_2020_0120_20200120013609531.jpg&refer=http___www.jisuxia.jfif

输入URL到回车后发生了什么呢?

具体有下面这些操作

  • URL解析
  • DNS 查询
  • TCP 连接
  • HTTP 请求
  • 响应请求
  • 页面渲染

详情

URL解析

首先浏览器判断你输入的是一个合法的URL 还是一个待搜索的关键词,并且根据你输入的内容进行对应操作。

URL 遵守一种标准的语法,它由协议、主机名、域名、端口、路径、以及文件名这六个部分构成,其中端口可以省略。具体语法规则如下:

www.juejin:8080/path/filena…

在上述语法规则中,https 表示协议,host 表示主机名,juejin 表示域名,8080 表示端口(可以省略),path 表示文件的路径,filename 表示文件名称。

DNS查询

(DNS查询过程也是一个重点,篇幅有限,这里不展开讲了,接下来会写篇文章复习说明)

查询过程如下图所示:

TCP连接

(具体关于TCP/IP协议之前文章写过,就不详谈了) 确定目标服务器服务器的IP地址后,则经历三次握手建立TCP连接

HTTP 请求

当建立tcp连接之后,就可以在这基础上进行通信,浏览器发送 http 请求到目标服务器。请求的内容包括: 请求行、请求头部、空行和请求数据4个部分。

  • 请求行

    请求行分为三个部分:请求方法、请求地址URL和HTTP协议版本,它们之间用空格分割

    请求方法

    大致有:GET、POST、DELETE、PUT...

    具体请看:

image.png

  • 请求头部

请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔

  • 请求数据

请求数据不在GET方法中使用,而在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最长使用的请求头部是Cntent-Type和Content-Length

响应请求

当服务器接收到浏览器的请求之后,就会进行逻辑操作,处理完成之后返回一个HTTP响应消息,包括:

  • 状态行

    由协议版本号, 状态码, 状态消息 三部分组成

    (状态码不展开说了,也是面试一个重要问题)

  • 响应头

    用来说明客户端要使用的一些附加信息

  • 空行

    消息报头后面的空行是必须的

  • 响应正文

    服务器返回给客户端的文本信息

当页面关闭之后,tcp链接则会经过四次挥手完成断开

页面渲染

当浏览器接收到服务器响应的资源后,首先会对资源进行解析:

  1. 查看响应头的 Content-Type的值,根据不同的资源类型采用不同的解析方式
  2. 查看响应头的信息,根据不同的指示做对应处理

关于页面的渲染过程如下:

  • 解析HTML,构建 DOM 树
  • 解析 CSS ,生成 CSS 规则树
  • 合并 DOM 树和 CSS 规则,生成 render 树
  • 布局 render 树( Layout / reflow ),负责各元素尺寸、位置的计算
  • 绘制 render 树( paint ),绘制页面像素信息
  • 浏览器会将各层的信息发送给 GPU,GPU 会将各层合成( composite ),显示在屏幕上