网页请求流程

从浏览器输入网址、回车后,到用户看到网页内容,经过的步骤如下:

(1)dns解析,获取ip地址;

(2)建立TCP连接,3次握手;

(3)发送HTTP请求报文;

(4)服务器接收请求并作处理;

(5)服务器发送HTTP响应报文;

(6)断开TCP连接,4次握手。

--------------------------------------------------------------------------------

(1)DNS解析阶段

http://www.cnblogs.com/yuan2016/p/DNS.html

本机系统先访问本机的hosts文件和缓存,再去找dns(叫做local dns)询问,一般在运营商那里。

(2)建立TCP连接,3次握手

客户端首先与服务器建立连接,发送SYN请求;服务器收到请求后,发送SYN/ACK确认连接请求;客户端收到后再发送ACK进行确认。

网页请求流程

(3)HTTP请求报文

分为4部分:

① 请求行(3部分信息):请求方法、请求url、http协议版本。

请求方法:GET、POST、HEAD、PUT等;

HTTP协议版本:一般为两种:http1.0、http1.1。其中,http1.0在每次请求之后,都释放连接,针对网页中的不同元素,如视频、图片,要分别进行tcp连接,需请求多次;而http1.1可进行持久连接,例如,网页中的元素可一次性请求完,而只需进行一次tcp连接。

② 请求头部。客户端的信息、字符集等。

③ 空白行。

④ 请求主体。

(5)服务器的HTTP响应报文

也分为4部分:

① 起始行:http协议版本、状态码、响应头部信息。

状态码:

(1)100~199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程 。
(2)200~299 表示成功接收请求并已完成整个处理过程 。
(3)300~399 为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址。
(4)400~499 客户端的请求有错误。
(5)500~599 服务器端出现错误。

常见的几种如下:

正确:200;

网站被重定向,永久跳转:301;

资源存在但没有权限,服务器设置了访问权限(Forbidden):403;

资源不存在:404;

服务器内部错误,无法完成用户请求:500;

连接不上后台服务器(Bad Gateway):502;

回复超时(Gateway Timeout):504。

② 响应头部。

③ 空行。

④ 响应主体。静态网页一般就是html,无法和用户进行交互;动态网页,如:jsp、php、asp等,可交互以及显示特效;伪静态,就是动态网页利用rewrite重写技术变成静态网页,目的是方便搜索引擎收录,搜索引擎对url的问号等识别不好,提高网站被搜索到的几率。

(6)断开TCP连接,4次握手

网页请求流程

① 客户端发送FIN=1的数据包到服务端,并进入wait 1状态;

② 服务端接收到之后,发送ACK进行确认,表示前面的数据全都收到了,并释放客户端到服务端的连接,进入close wait状态,此时服务端仍可向客户端发送数据;

③ 客户端收到服务器的ACK之后,进入WAIT 2状态,进一步等待服务器发出连接释放的数据段;

④ 当服务器发送完全部的数据后,释放服务器向客户端的TCP传输连接,向客户机发送FIN=1,ACK=1的数据包,并进入LAST ACK(最后确认)状态,等待客户端的确认;

⑤ 客户端收到服务器的FIN+ACK数据包后,向服务器发送一个ACK=1的数据包,进入到TIME WAIT状态,需等待2MSL时间(以防最后一个ACK数据包丢失),然后,客户端才进入closed状态,释放tcp连接。

⑥ 服务器收到客户端的ACK数据包后,进入CLOSED状态,释放TCP连接。完成整个TCP传输连接释放过程。

整个TCP建立、释放过程如下图所示:

 网页请求流程