一次HTTP请求的完整过程和HTTP常见状态码

一次HTTP请求的完整过程

大致流程差不多如下

  1. 浏览器根据域名解析IP地址
  2. 浏览器通过IP地址与WEB服务器建立TCP连接
  3. 浏览器给WEB服务器发送一个HTTP请求
  4. 服务端相应HTTP请求,浏览器得到服务器相应的内容,比如HTML代码
  5. 浏览器解析HTML代码,并请求HTML代码中的资源
  6. 关闭该TCP连接,浏览器对页面进行渲染呈现并呈现

1.浏览器根据域名解析IP地址

浏览器将用户输入的域名,先搜索浏览器自身的DNS缓存,如果缓存中有对应的且未过期的条目,得到IP解析结束。缓存中没有,搜索操作系统自身的DNS缓存,有则结束没有就查询hosts 文件查看是否有对应未过期的条目,还没有被就会向操作系统中指定的DNS服务器查询域名,最终得到IP地址。

2.浏览器通过IP地址与WEB服务器建立TCP连接

根据解析的IP地址加上WEB端口号,与服务端进行TCP的3次握手

3.浏览器给WEB服务器发送一个HTTP请求

通过TCP连接浏览器给服务端发送HTTP请求。

HTTP请求报文由请求行、请求头部、请求数据和空行4部分组成

HTTP请求实例

# 请求行 分别是 方法、URI、协议版本
POST /form/entry   HTTP/1.1
# 请求头部
Host: hackr.jp
Connection: keep-alive
Content-Type: applications/x-www-from-urlencoded
Content-Length: 16
# 请求数据
name=test&age=18

请求行

请求URL组成是协议://主机:端口/路径,路径就是URI

协议版本格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1。

请求头部

由键值对组成,每行一对,请求头部的最后,会有一个空行,表示请求头部结束

请求头介绍

  • Content-Length:表示请求体中数据长度
  • Content-Type:正在传输的类型,HTTP允许传输任意类型的数据和对象
  • Host:接收请求的服务器地址
  • User-Agent:发送请求的程序名称
  • Connection:指定与连接相关的属性
  • Accept-Charset:通知服务端可以发送的编码格式
  • Accept-Encoding:通知服务端可以发送的数据压缩格式
  • Accept-Language:通知服务端可以发送的语言

请求数据

请求调用接口时传输的实参

4.服务端响应HTTP请求,浏览器得到服务器相应内容

服务端发送相应报文给客户端,响应报文由状态行、响应头部、响应正文和空行四个部分组成,

状态行

包含了协议版本、状态码、状态码描述。协议版本是服务端的HTTP版本号,状态码由3位数字组成,状态码描述顾名思义,比如响应状态码是200 描述就是ok

响应头部

  • Server:服务器程序的名称和版本
  • Content-Type:响应正文长度
  • Content-Charset:响应正文使用的状态码
  • Content-Encoding:响应正文使用的数据压缩格式
  • Content-Language:响应正文使用的语言

响应正文

包含了HTML代码

5.浏览器解析HTML代码,并请求HTML代码中的资源

浏览器拿到了HTML代码,并请求HTML代码中的资源,遇到静态资源时,向服务端去请求下载

6.关闭该TCP连接,浏览器对页面进行渲染并呈现

浏览器利用自己内部的工作机制,把请求到的静态资源和HTML代码进行渲染,呈现给用户。

HTTP协议常见状态码

HTTP 状态码是服务器在响应客户端请求时返回的三位数字代码,用于表示请求的处理状态。以下是常见的 HTTP 状态码及其含义:

  • 1xx:信息性状态码

    • 100 Continue:客户端继续发送请求的剩余部分
    • 101 Swithching Protocols:服务器同意客户端请求切换协议,如HTTP切换到WebSocket
  • 2xx:成功状态码

    • 200 ok:请求成功,响应包含请求的数据(如GET请求)
    • 201 Created:请求成功并创建了新资源(如POST请求)
    • 202 Accepted:请求已接受但未处理完成(异步任务)
    • 204 NoContent:请求成功,但响应无内容(如DELETE请求)
  • 3xx:重定向状态码

    • 301 Moved Permanently:资源已永久移动到新 URL(浏览器会缓存并自动跳转)。

    • 302 Found(临时重定向):资源临时移动到新 URL(浏览器不会缓存)。

    • 304 Not Modified:资源未修改,客户端可使用缓存(与 If-Modified-SinceETag 相关)。

4xx(客户端错误状态码)

  • 400 Bad Request:请求语法错误,服务器无法理解。
  • 401 Unauthorized:需要身份验证(如未提供有效的认证信息)。
  • 403 Forbidden:服务器拒绝请求(权限不足)。
  • 404 Not Found:请求的资源不存在。
  • 405 Method Not Allowed:请求方法(如 GET/POST)不被允许。
  • 408 Request Timeout:客户端请求超时。
  • 429 Too Many Requests:客户端发送过多请求(限流)。

5xx(服务器错误状态码)

  • 500 Internal Server Error:服务器内部错误(通用错误码)。
  • 502 Bad Gateway:代理服务器从上游服务器收到无效响应(如反向代理故障)。
  • 503 Service Unavailable:服务器暂时不可用(如过载或维护)。
  • 504 Gateway Timeout:代理服务器等待上游服务器响应超时。

常见场景示例

  • 访问成功:200 OK
  • 页面不存在:404 Not Found
  • 无权限访问:403 Forbidden
  • 服务器崩溃:500 Internal Server Error
  • 重定向到新地址:301 Moved Permanently
4xx:你xx
5xx:服务器xx
posted @ 2025-04-24 16:04  夏凉浮生  阅读(127)  评论(0)    收藏  举报