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 框架下的核心流程:
- HandlerMapping:根据 URL 路径找到对应的
HandlerMethod(Controller 方法) - HandlerAdapter:适配调用 Handler
- 参数解析与绑定:
@RequestParam、@PathVariable、@RequestBody等注解解析HttpMessageConverter(如MappingJackson2HttpMessageConverter)将 JSON 反序列化为 Java 对象- 参数校验(
@Valid、@Validated,触发javax.validation校验)
- 拦截器链:
HandlerInterceptor.preHandle() - 执行 Controller 方法
10. 业务逻辑处理
典型的调用链路:
Controller(facade 层接口)
→ Service 层(业务编排)
→ FacadeImpl(调用外部服务)
→ Dal 层(数据库访问,MyBatis/JPA)
→ Utils 层(工具类处理)
- 事务管理:
@Transactional控制(Spring AOP 代理) - 异常处理:
@ControllerAdvice+@ExceptionHandler统一捕获
11. 返回值处理
HttpMessageConverter将返回对象序列化为 JSONHandlerInterceptor.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 → 网络 → 浏览器渲染

浙公网安备 33010602011771号