码迷,mamicode.com
首页 > Web开发 > 详细

浏览器输入 URL 之后发生了什么

时间:2021-04-12 11:51:03      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:内容   步骤   time_wait   设置   客户端   挥手   request对象   gen   域名解析   

1、步骤

(1)DNS 解析

(2)TCP 连接

(3)发送 HTTP 请求

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

(5)浏览器解析渲染页面

(6)连接结束

2.详细内容

(1)DNS解析

  1. 输入 IP,此时电脑发送一个 DNS 请求到本地 DNS 服务器(一般是网络接入服务商提供 eg:电信,移动);

  2. 本地 DNS 服务器会首先查询它的缓存记录,如果有,则直接返回结果,若没有,本地 DNS 服务器还要向 DNS 根服务器进行查询;

  3. DNS 根服务器没有记录具体域名和 IP 地址的对应关系,而是告诉本地 DNS 服务器,可到域服务器上继续查询,并给出域服务器地址;

  4. 本地服务器继续向域服务器发出请求,返回域名的解析服务器地址;

  5. 本地 DNS 向域名解析服务器发出请求,收到域名与 IP 地址对应关系;

  6. 本地 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响应报文也是由三部分组成: 状态码, 响应报头和响应报文。

  1. 1XX 信息性状态码

    • 100 继续

    • 101 切换协议

  2. 2XX 成功状态码

    • 200 OK 成功处理了请求

    • 204 No Content 请求处理成功,但没有资源可返回

    • 206 Partial Content 请求资源的某一部分

  3. 3XX 重定向状态码

    • 301 永久性重定向,表示请求的资源已被分配了新的 URI

    • 302 临时性重定向,资源的 URL 已临时定位到其他位置

    • 303 告诉客户端应该用另一个 URL 获取资源

    • 304 表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况

  4. 4XX 客户端错误状态码

    • 400 表示请求报文中存在语法错误

    • 401 未授权

    • 403 服务器拒绝了请求

    • 404 服务器无法找到所请求的 URL

  5. 5XX 服务器错误状态码

    • 500 内部服务器错误

    • 502 错误网关

    • 503 服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

    • 504 响应超时

(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状态。

浏览器输入 URL 之后发生了什么

标签:内容   步骤   time_wait   设置   客户端   挥手   request对象   gen   域名解析   

原文地址:https://www.cnblogs.com/zjqzilq/p/14641359.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!