发送HTTP请求到渲染页面的全过程

1.域名解析

        1.先检查浏览器缓存中有没有这个域名对应解析过的IP地址,若有则解析结束。

        2.缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。

        3.如果操作系统也没有,则把这个域名发送给本地DNS服务器,若仍没有命中则到根DNS服务器请求解析。

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请求

TCP 连接建立后,浏览器向服务器发送 HTTP 请求。请求包含以下信息:

        HTTP 方法(如 GET、POST 等)

        请求的 URL 和资源路径

        请求头(包括 Cookies、用户代理、缓存控制等)

        如果是 POST 请求,还会发送请求体(如表单数据)

4.服务器处理请求

服务器接收到请求后,会根据请求的资源路径和请求方法,处理该请求并生成响应。通常,服务器会:

        验证请求的合法性

        查找所请求的资源(如 HTML 文件、图片、CSS、JavaScript 等)

        可能涉及到数据库查询和后端逻辑处理

        如果是动态内容(如 PHP、Node.js 等),服务器将生成 HTML 并返回。

5. 服务器返回 HTTP 响应

服务器处理完成后,将返回 HTTP 响应。响应包括以下内容:

        状态码(如 200 表示成功,404 表示资源未找到,500 表示服务器错误)

        响应头(如内容类型、缓存控制、Cookies 等)

        响应体,这通常包含 HTML、JSON 或其他资源。

6. 浏览器接收响应并解析

浏览器接收到服务器的响应后,开始解析并渲染页面。这个过程包括以下步骤:

a. 解析 HTML

  • 浏览器从顶部开始解析 HTML 文档,构建 DOM 树(Document Object Model),代表页面的结构。

b. 解析 CSS

  • 当遇到 <link><style> 标签时,浏览器会解析外部或内嵌的 CSS,并构建 CSSOM 树(CSS Object Model),用于应用样式。

c. 解析 JavaScript

  • 当遇到 <script> 标签时,浏览器会暂停页面渲染,执行 JavaScript 脚本。JavaScript 脚本可以操作 DOM 树或触发额外的网络请求.

7.服务器关闭TCP连接

四次挥手:

        1.客户端发送FIN=M,表示客户端不再发送数据,但仍然可以接收服务器的数据。

        2.服务端收到FIN后,发送ack=M+1,表示已经收到客户端的关闭请求,并确认它不再发送数据。但此时,服务器仍然可能有未发完的数据。

        3.当服务器完成了所有的数据发送后,向客户端发送FIN=N,表示自己也完成了数据传输,不再发送数据。

        4.客户端收到FIN=N报文后,向服务端发送ack=N+1,表示已确认服务器的关闭请求。客户端会在这个时候等待一段时间(TIME_WAIT 状态),以确保服务器接收到了该确认报文,之后关闭连接。

常出现的状态码:

1. 1xx 信息性状态码

  • 100 Continue:客户端应继续发送请求的剩余部分。
  • 101 Switching Protocols:服务器同意客户端的协议切换请求。

2. 2xx 成功状态码

  • 200 OK:请求成功。服务器已成功处理请求,返回请求的资源(如网页、文件)。
  • 201 Created:请求成功,服务器已创建新的资源(通常是 POST 请求后)。
  • 202 Accepted:请求已被接受,但尚未处理完成(异步处理)。
  • 204 No Content:请求成功,但没有返回任何内容。适用于不需要页面刷新的情况。

3. 3xx 重定向状态码

  • 301 Moved Permanently:请求的资源已被永久移动到新的 URL,后续应使用新的 URL 访问资源。
  • 302 Found:请求的资源暂时被移动到另一个 URL,客户端应继续使用原有的 URL 进行请求。
  • 304 Not Modified:资源未被修改,客户端可以使用缓存版本。通常用于优化请求,减少不必要的网络传输。

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

  • 400 Bad Request:请求格式错误或无效,服务器无法理解请求。
  • 401 Unauthorized:请求要求用户进行身份验证(通常是由于缺少或无效的身份认证信息)。
  • 403 Forbidden:服务器理解请求,但拒绝执行。通常是因为权限问题。
  • 404 Not Found:请求的资源不存在。常见于用户访问了错误的 URL 或资源被删除。
  • 405 Method Not Allowed:请求方法(如 GET、POST 等)不被允许在目标资源上执行。
  • 409 Conflict:请求与服务器的当前状态发生冲突,通常在资源的并发操作或数据更新时发生。

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

  • 500 Internal Server Error:服务器在处理请求时发生内部错误,无法完成请求。
  • 502 Bad Gateway:服务器作为网关或代理,从上游服务器收到无效响应。
  • 503 Service Unavailable:服务器暂时无法处理请求,通常是由于服务器过载或维护。
  • 504 Gateway Timeout:服务器作为网关或代理,未能及时从上游服务器收到响应。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值