标签:内容 步骤 time_wait 设置 客户端 挥手 request对象 gen 域名解析
1、步骤
(1)
TCP 连接
(3)发送 HTTP 请求
(4)服务器处理请求并返回 HTTP 报文
(5)浏览器解析渲染页面
(6)
2.详细内容
(1)DNS解析
本地 DNS 服务器会首先查询它的缓存记录,如果有,则直接返回结果,若没有,本地 DNS 服务器还要向 DNS 根服务器进行查询;
DNS 根服务器没有记录具体域名和 IP 地址的对应关系,而是告诉本地 DNS 服务器,可到域服务器上继续查询,并给出域服务器地址;
本地服务器继续向域服务器发出请求,返回域名的解析服务器地址;
本地 DNS 向域名解析服务器发出请求,收到域名与 IP 地址对应关系;
(2)TCP连接
主要是三次握手:
1. 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;
2. 服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
3. 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
(3)发送HTTP请求
发送HTTP请求的过程就是构建HTTP请求报文并通过TCP协议中发送到服务器指定端口(HTTP协议80/8080, HTTPS协议443)。HTTP请求报文是由三部分组成: 请求行, 请求头和请求体
1.请求行:Method Request-URL HTTP-Version CRLF ;常用的请求方法有: GET, POST, PUT, DELETE, OPTIONS, HEAD。
2.请求头:常见的请求头有: Accept, Accept-Charset, Accept-Encoding, Accept-Language, Content-Type, Authorization, Cookie, User-Agent等。
3.请求体:当使用POST, PUT等方法时,通常需要客户端向服务器传递数据。这些数据就储存在请求正文中。在请求包头中有一些与请求正文相关的信息,例如: 现在的Web应用通常采用Rest架构,请求的数据格式一般为json。这时就需要设置Content-Type: application/json。
(4)服务器处理请求并返回HTTP报文
服务器在收到浏览器发送的HTTP请求之后,会将收到的HTTP报文封装成HTTP的Request对象,并通过不同的Web服务器进行处理,处理完的结果以HTTP的Response对象返回,HTTP响应报文也是由三部分组成: 状态码, 响应报头和响应报文。
100 继续
101 切换协议
2XX 成功状态码
200 OK 成功处理了请求
204 No Content 请求处理成功,但没有资源可返回
206 Partial Content 请求资源的某一部分
3XX 重定向状态码
301 永久性重定向,表示请求的资源已被分配了新的 URI
302 临时性重定向,资源的 URL 已临时定位到其他位置
303 告诉客户端应该用另一个 URL 获取资源
304 表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况
4XX 客户端错误状态码
400 表示请求报文中存在语法错误
401 未授权
403 服务器拒绝了请求
404 服务器无法找到所请求的 URL
5XX 服务器错误状态码
500 内部服务器错误
502 错误网关
503 服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
(5)浏览器解析渲染页面
浏览器是一个边解析边渲染的过程。首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。
reflow(回流):也称作Layout,中文叫回流,一般意味着元素的内容、结构、位置或尺寸发生了变化,需要重新计算样式和渲染树,这个过程称为Reflow
repain(重绘):当盒模型的位置,大小以及其他属性,如颜色,字体,等确定下来之后,浏览器便开始绘制内容,这个过程称为repain。
(6)连接结束
主要是四次挥手:
1.客户端发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务端的确认。
2.服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE_WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT2(终止等待2)状态,等待服务端发出的连接释放报文段。
3.服务端没有要向客户端发出的数据,服务端发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务端进入LAST_ACK(最后确认)状态,等待客户端确认。
4.客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。
标签:内容 步骤 time_wait 设置 客户端 挥手 request对象 gen 域名解析
原文地址:https://www.cnblogs.com/zjqzilq/p/14641359.html