从输入一个网址到浏览器显示网页经历的过程
DNS解析
统一资源定位符(Uniform Resource Locator),简称URL,俗称网址,代替了复杂的IP地址,方便大家记忆。 在浏览器输入网址后,首先要进行域名解析,才能知道域名对应的IP地址。
TCP三次握手
第一次握手:由客户机发起,告诉服务器我要发送请求了。
第二次握手:由服务器发起,告诉客户机我已经做好准备,可以发送请求了。
第三次握手:由客户机发起,告诉服务器,我马上开始发送,准备接收吧。
发送HTTP请求
握手成功后, 浏览器就可以向服务器发送http请求了, 请求数据包。 发送HTTP请求的过程就是构建HTTP请求报文并通过TCP协议中发送到服务器指定端口(HTTP协议80/8080, HTTPS协议443)。HTTP请求报文是由三部分组成: 请求行,请求报头和请求正文。
服务器处理请求并返回HTTP报文
服务器上会装有处理请求的应用——Web Server,常用的有IIS,Apache,nginx等。
浏览器解析渲染页面
通常分为5步:
- 解析HTML,构建DOM树。
- 解析CSS,生成CSS规则树。
- 合并DOM树和CSS规则树,生成render树。
- 布局render树,负责各元素尺寸、位置的计算。
- 绘制render树,绘制页面像素信息。
断开连接
所有数据传输完毕后,就可以断开连接了,此时需要发起四次挥手:
第一次挥手,由客户机发送,告诉服务器,我的请求报文发送完了,你可以准备关闭了。
第二次挥手,服务器向客户端发送一个确认,告诉客户端服务器已经收到客户机发送的包。
第三次挥手,服务器向客户机发送一个包,告诉客户机服务器不会再向客户机发送数据了,并等待客户机的确认。
第四次挥手,客户机向服务器发送最终确认,服务器收到最终确认后就进入关闭状态,而客户机需要等待2倍的最长报文段寿命的时间后才会进入关闭状态。
HTTP协议
HTTP超文本传输协议是互联网上应用最为广泛的一种网络协议,它是基于TCP的应用层协议,简单的说就是客户端和服务器进行通信的一种规则,它的模式非常简单,就是客户端发起请求,服务器响应请求。

- 请求行:包含请求方法、请求地址和HTTP协议版本。
- 消息报头:包含一系列的键值树。
- 请求正文:可选部分,需要和消息报头之间由一个空行。
HTTP请求方法
| 方法 | 描述 |
|---|---|
| GET | 从服务器获取指定(请求地址)的资源的信息,通常之用于只读数据,不会对资源进行修改。 |
| POST | 向指定资源提交数据(比如提交表单,上传文件),请求服务器进行处理。数据被包含在正文中,可能会创建新的资源或更新现有资源。 |
| PUT | 通过指定资源的唯一标识,请求服务器创建或更新资源。 |
| DELETE | 请求服务器删除指定资源 |
| HEAD | 与GET方法类似,从服务器获取资源信息,但HEAD不含有呈现数据,仅仅是HTTP头信息。HEAD的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获得资源的元信息。 |
| OPTIONS | 该方法可以使服务器传回资源所支持的所有HTTP请求方法。 |
HTTP响应 HTTP响应与HTTP请求类似,由三部分组成:
- 状态行:包含HTTP协议版本、状态码和状态描述,以空格分离。
- 响应头:即消息报头,包含一系列的键值对。
- 响应正文:返回内容,和响应头之间有一个空行。
状态码
- 1XX 消息--请求已被服务接收,继续处理
- 2XX 成功--请求已成功被服务器接收、理解、并接受。
- 3XX 重定向--需要后续操作才能完成这一请求。
- 4XX 请求错误--请求含有词法错误或者无法被执行。
- 5XX 服务器错误--服务器才处理某个正确请求时发生错误。
HTTP特点
- 客户端/服务器模式
- 简单快速:客户端向服务器请求服务时,通过传送请求方法、请求地址和数据体(可选)即可
- 灵活:允许传输任意类型的数据对象,通过Content-Type标识
- 无状态:对事物处理没有记忆能力
浏览器的渲染机制
