说,收到url后你都干了什么

本文最后更新于:3 年前

__sawamura_spencer_eriri_saenai_heroine_no_sodatekata_drawn_by_misaki_kurehito__fb27a7ea6c48b2ef76fe915e378b9098.png

简单说一下,浏览器从接收到一个URL,到最后展示出页面,经历了哪些过程。

简述

1.DNS解析

2.TCP连接

3.发送HTTP请求

4.服务器处理请求并返回HTTP报文

5.浏览器解析渲染页面

DNS解析

DNS域名解析,获得域名相对应的IP地址。

首先,浏览器是不“认识”域名的,它只“认识”IP,所以他通过三种方式得到域名对应的IP:

1.检查自身缓存中有没有被解析过的这个域名对应的ip地址。

2.查操作系统缓存中有没有对应的已解析过的结果。

​ 在windows中可通过c盘里一个叫hosts的文件来设置,如果你在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。

image

被修改后,会造成域名劫持。

3.请求本地域名服务器(LDNS)来解析这个域名。

4.到Root Server 域名服务器请求解析。

TCP连接

浏览器向服务器发起TCP连接,与浏览器建立TCP三次握手

发送HTTP请求

与服务器建立了连接后,就可以向服务器发起请求了。

发送HTTP请求的过程就是构建HTTP请求报文,并通过TCP协议发送到服务器指定端口(HTTP协议80/8080,HTTPS协议443)。

HTTP请求是由三部分组成:请求行、请求报头和请求正文。

请求行:

请求方法、请求地址和协议版本。

请求方法:

HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。

最常的两种GETPOST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT。

请求地址:

URL:统一资源定位符,是一种自愿位置的抽象唯一识别方法

组成:<协议>://<主机>:<端口>/<路径>

端口和路径有时可以省略(HTTP默认端口号是80)

协议版本

协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1

请求头部

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

请求头 说明
Host 接受请求的服务器地址,IP:端口号或者域名
User-Agent 发送请求的应用程序名称
Connection 指定与连接相关属性,如Connection:Keep-Alive
Accept-Charset 通知服务端可以发送的编码格式
Accept-Encoding 通知服务端可以发送的数据压缩格式
Accep-Language 通知服务端可以发送的语言

请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据,这一行非常重要,必不可少。

请求数据

可选部分,比如GET请求就没有请求数据。

服务器处理请求

​ 服务器端收到请求后,由web服务器(准确来说应该是HTTP服务器)处理请求,诸如Apache、Ngnix、IIS等。web服务器解析用户请求,知道了要调度哪些资源文件,再通过相应的这些文件处理用户请求和参数,并调用数据库信息 ,最后将结果通过web服务器返回浏览器客户端。

返回相应结果至浏览器

HTTP响应报文主要由状态行、响应头部、空行以及响应数据组成。

状态行

由3部分组成,分别为:协议版本,状态码,状态码描述。

其中协议版本与请求报文一致,状态码描述是对状态码的简单描述,状态码做简单介绍。

1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。

常见

状态码 说明
200 响应成功
302 跳转,条状属性通过响应头中的Location指定
400 客户端请求有语法错误,不能被服务器识别
403 服务器收到请求,但是拒绝提供服务(认证失败)
404 请求资源不存在
500 服务器内部错误

响应头部

与请求头部类似,为响应报文添加了一些附加信息

响应数据

用于存放需要返回给客户端的数据信息。

浏览器解析渲染页面

浏览器在收到HTML、CSS、JS文件后,就需要进行渲染。

浏览器是一个边解析边渲染的过程。

首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。

JS的解析是由浏览器中的JS解析引擎完成的。

参考

CSCN-DoubleWeiWei001:详解DNS域名解析全过程

知乎-一次完整的HTTP请求

CSDN-浏览器从接收到一个URL,到最后展示出页面,经历了哪些过程