说,收到url后你都干了什么
本文最后更新于:3 年前
简单说一下,浏览器从接收到一个URL,到最后展示出页面,经历了哪些过程。
简述
1.DNS解析
2.TCP连接
3.发送HTTP请求
4.服务器处理请求并返回HTTP报文
5.浏览器解析渲染页面
DNS解析
DNS域名解析,获得域名相对应的IP地址。
首先,浏览器是不“认识”域名的,它只“认识”IP,所以他通过三种方式得到域名对应的IP:
1.检查自身缓存中有没有被解析过的这个域名对应的ip地址。
2.查操作系统缓存中有没有对应的已解析过的结果。
在windows中可通过c盘里一个叫hosts的文件来设置,如果你在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。
被修改后,会造成域名劫持。
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。
最常的两种GET和POST,如果是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解析引擎完成的。
参考
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!