http请求过程

HTTP 接口从发起到结束的完整过程


一、浏览器端

1. URL 解析

  • 浏览器解析 URL 的协议(http/https)、域名、端口、路径、查询参数
  • 检查 HSTS 列表,决定是否强制使用 HTTPS

2. DNS 解析

  • 浏览器缓存 → OS 缓存 → 路由器缓存 → ISP DNS → 递归查询根域名服务器
  • 最终获得目标服务器的 IP 地址

3. TCP 连接建立

  • 三次握手:SYN → SYN+ACK → ACK
  • 如果是 HTTPS,还需 TLS 握手(证书验证、密钥协商)

4. 发送 HTTP 请求

  • 构造请求行:GET /path HTTP/1.1
  • 添加请求头(Host、User-Agent、Cookie、Accept、Content-Type 等)
  • 如果有请求体(POST/PUT),写入 body

二、网络层

5. 负载均衡 / 反向代理

  • 请求先到达负载均衡层(如 Nginx / Tengine / SLB)
  • 根据路由规则将请求转发到对应的 Java 应用服务器
  • 这一层可能的工作:
    • SSL 卸载(HTTPS → HTTP)
    • 限流、黑白名单
    • 静态资源直接返回
    • 请求头注入(X-Forwarded-For、X-Real-IP)

6. 网络传输

  • 经过交换机、路由器等网络设备
  • 数据包经过 TCP 分段、IP 分片、MAC 帧封装等过程到达服务端

三、Java 服务端

7. Servlet 容器接收请求(如 Tomcat)

请求进入 Tomcat 的 NioEndpoint
  → Acceptor 线程接受连接
  → Poller 线程检测读写事件
  → Worker 线程(线程池)处理请求
  • Tomcat NIO 模型:Acceptor → Poller → Executor(ThreadPool)
  • 解析 HTTP 协议:请求行、请求头、请求体

8. Filter 链执行

  • 请求经过 FilterChain,依次执行各 Filter:
    • 编码过滤器:设置字符集(UTF-8)
    • 安全过滤器:CSRF 校验、XSS 过滤、认证鉴权
    • 日志过滤器:记录请求信息、TraceId 注入
    • 限流过滤器:接口级别限流
  • 请求/响应包装(如 HttpServletRequestWrapper

9. DispatcherServlet 分发(Spring MVC)

在 Spring MVC 框架下的核心流程:

  1. HandlerMapping:根据 URL 路径找到对应的 HandlerMethod(Controller 方法)
  2. HandlerAdapter:适配调用 Handler
  3. 参数解析与绑定
    • @RequestParam@PathVariable@RequestBody 等注解解析
    • HttpMessageConverter(如 MappingJackson2HttpMessageConverter)将 JSON 反序列化为 Java 对象
    • 参数校验(@Valid@Validated,触发 javax.validation 校验)
  4. 拦截器链HandlerInterceptor.preHandle()
  5. 执行 Controller 方法

10. 业务逻辑处理

典型的调用链路:

Controller(facade 层接口)
  → Service 层(业务编排)
    → FacadeImpl(调用外部服务)
    → Dal 层(数据库访问,MyBatis/JPA)
    → Utils 层(工具类处理)
  • 事务管理:@Transactional 控制(Spring AOP 代理)
  • 异常处理:@ControllerAdvice + @ExceptionHandler 统一捕获

11. 返回值处理

  • HttpMessageConverter 将返回对象序列化为 JSON
  • HandlerInterceptor.postHandle() / afterCompletion()
  • 封装统一响应体(code、message、data)

四、响应返回

12. 响应回传

  • Tomcat 将响应数据通过 TCP 连接写回
  • 经历与请求相反的网络路径(应用服务器 → Nginx → 浏览器)

13. 浏览器处理响应

  • 解析响应状态码(200/301/400/500 等)
  • 读取响应头(Content-Type、Set-Cookie、Cache-Control 等)
  • 根据 Content-Type 渲染内容(HTML 渲染 / JSON 解析 / 文件下载等)
  • TCP 四次挥手关闭连接(或 Keep-Alive 复用)

整体链路概览

浏览器
  │ URL解析 → DNS解析 → TCP三次握手(→ TLS握手)
  │ 发送HTTP请求
  ▼
负载均衡/反向代理(Nginx/SLB)
  │ SSL卸载 → 路由转发 → 限流/鉴权
  ▼
Servlet容器(Tomcat)
  │ NioEndpoint接收 → 线程池分配
  ▼
Filter链
  │ 编码 → 安全 → 日志 → 限流
  ▼
Spring MVC DispatcherServlet
  │ HandlerMapping → HandlerAdapter → 参数绑定/校验
  ▼
Interceptor.preHandle
  ▼
Controller → Service → Dal/外部服务
  ▼
Interceptor.postHandle
  ▼
返回值序列化 → Filter链(响应) → Tomcat写回
  ▼
Nginx → 网络 → 浏览器渲染
posted @ 2026-05-12 16:51  webzd  阅读(52)  评论(0)    收藏  举报