【转载】从输入URL到页面渲染:一张图带你搞懂完整的HTTP请求全流程
引言
作为一名 Java 全栈开发者,“在浏览器输入 URL 地址回车后发生了什么?”都是一道经典且高频的面试题。
这个过程涵盖了网络协议、浏览器工作原理以及服务端处理逻辑。今天,我结合下面这张完整的工作流程图,带你梳理从用户敲下回车键,到最终页面呈现在眼前的完整生命周期。

一、浏览器的预处理与缓存检查
一切的起点,来源于用户在地址栏的输入(用户输入URL)。
- 判断输入类型:浏览器首先会判断用户输入的是合法的URL还是一个搜索词。
- 如果是搜索词,浏览器会调用默认搜索引擎生成URL。
- 如果是URL,则直接进入下一步。
- 检查缓存(关键性能优化点):在真正发起网络请求前,浏览器会优先检查缓存(包括强缓存、协商缓存、Service Worker等)。
- 缓存命中:如果本地有可用缓存,浏览器会直接使用本地缓存并渲染,这是最快的情况,无需任何网络交互。
- 缓存未命中:如果缓存失效,浏览器只能乖乖踏上真实的网络请求之旅。
二、网络请求的跋涉
当缓存未命中,请求进入网络层。
- DNS域名解析:浏览器需要将域名(如 www.example.com)转换成机器可读的IP地址(例如 192.168.1.1)。这个过程被称为DNS解析(DNS域名解析)。
- 建立TCP连接:拿到IP后,浏览器需要与服务器建立TCP连接。这里会发生我们熟知的“三次握手”,确保双方收发能力正常。
- 判断 HTTP 还是 HTTPS(关键一步):
在 TCP 连接建立之后,浏览器并不是立刻发送应用层数据,而是要根据 URL 的协议(http:// 还是 https://)进行判断:- 如果是 HTTP 请求(默认端口80):直接跳过加密步骤,准备发送明文数据。
- 如果是 HTTPS 请求(默认端口443):TCP 连接建立后,还需要进行 TLS/SSL 握手。浏览器会向服务器请求数字证书,验证证书的合法性,双方协商生成对称加密密钥(会话密钥)。之后的所有
HTTP 数据都会通过这个加密通道进行传输。
- 构建HTTP请求:无论是明文还是加密,安全通道准备好后,浏览器会根据规范构建HTTP请求(包含请求行、请求头、请求体等),准备发送给服务器。
三、服务器端的接力(Tomcat处理)
请求通过网络连接,抵达了服务端(图中以 Tomcat服务器 为例)。
- 请求路由(Servlet映射):Tomcat接收到请求后,会根据请求的资源类型进行分流:
- 静态请求(如HTML、CSS、JS、图片等):请求会进入Tomcat容器(线程池),Tomcat Context(上下文)根据 URL 映射规则匹配具体的 Servlet,如果没有匹配到业务 Servlet,就会落到 DefaultServlet 处理静态资源,处理完毕后直接返回资源,无需经过复杂的业务逻辑。
- 动态请求(如API接口调用):请求会进入Tomcat容器(线程池),分配一个线程来处理。
- 过滤器(Filter)拦截:动态请求在到达真正的业务代码前,会先经过filter过滤器(如权限校验、日志记录、跨域处理等)。
- 业务处理的判断(原生 Servlet vs Spring MVC):
过滤器放行后,请求正式进入了业务处理阶段。此时,根据项目采用的架构,会有不同的处理路径:- 路径 A:传统原生 Servlet
如果是传统的 Java Web 项目,Tomcat 会根据 web.xml 配置或 @WebServlet 注解,直接将请求映射到开发者手写的一个个具体的 Servlet 实例上。Servlet 内部通过 doGet 或 doPost 方法处理请求,组装数据并写出响应。 - 路径 B:Spring MVC(现代主流)
如果项目整合了 Spring MVC,请求通常会被统一拦截到 Spring MVC 的核心前端控制器——DispatcherServlet(它本质上也是一个 Servlet,通常映射路径为 /)。
此时,DispatcherServlet 会接管请求,并开启 Spring MVC 的内部流转:- HandlerMapping:根据请求的 URL 路径,去寻找匹配的 Controller 中的具体方法(如 @RequestMapping 标注的方法)。
- HandlerAdapter:负责真正调用找到的 Controller 方法。
- 业务逻辑:Controller 方法执行具体的业务逻辑(通常还会调用 Service 层、DAO 层),处理完毕后返回 ModelAndView 或者 @ResponseBody 标注的 JSON 数据。
- ViewResolver:如果是返回页面,Spring MVC 会通过视图解析器解析成具体的 HTML/JSP;如果是 JSON,则直接转为数据。
- 路径 A:传统原生 Servlet
四、响应与最终渲染
服务端处理完毕后,数据开始原路返回。
- 返回HTTP响应:无论是原生 Servlet 输出的内容,还是 Spring MVC 的 Controller 返回的数据,最终都会由 Tomcat服务器(Tomcat connector) 封装成 HTTP响应返回给浏览器。(如果是HTTPS,响应数据同样会被加密后传输)
- 浏览器接收与渲染:浏览器接收到响应数据后,结合刚才在阶段一未命中的本地缓存策略,开始解析HTML、构建DOM树、加载CSS/JS,最终完成页面渲染,呈现给用户。

浙公网安备 33010602011771号