一次HTTP请求的完整过程和HTTP常见状态码
一次HTTP请求的完整过程
大致流程差不多如下
- 浏览器根据域名解析IP地址
- 浏览器通过IP地址与WEB服务器建立TCP连接
- 浏览器给WEB服务器发送一个HTTP请求
- 服务端相应HTTP请求,浏览器得到服务器相应的内容,比如HTML代码
- 浏览器解析HTML代码,并请求HTML代码中的资源
- 关闭该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-Since或ETag相关)。
-
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

浙公网安备 33010602011771号