【转载】从输入URL到页面渲染:一张图带你搞懂完整的HTTP请求全流程

引言

作为一名 Java 全栈开发者,“在浏览器输入 URL 地址回车后发生了什么?”都是一道经典且高频的面试题。

这个过程涵盖了网络协议、浏览器工作原理以及服务端处理逻辑。今天,我结合下面这张完整的工作流程图,带你梳理从用户敲下回车键,到最终页面呈现在眼前的完整生命周期。

一、浏览器的预处理与缓存检查

一切的起点,来源于用户在地址栏的输入(用户输入URL)。

  1. 判断输入类型:浏览器首先会判断用户输入的是合法的URL还是一个搜索词。
    • 如果是搜索词,浏览器会调用默认搜索引擎生成URL。
    • 如果是URL,则直接进入下一步。
  2. 检查缓存(关键性能优化点):在真正发起网络请求前,浏览器会优先检查缓存(包括强缓存、协商缓存、Service Worker等)。
    • 缓存命中:如果本地有可用缓存,浏览器会直接使用本地缓存并渲染,这是最快的情况,无需任何网络交互。
    • 缓存未命中:如果缓存失效,浏览器只能乖乖踏上真实的网络请求之旅。

二、网络请求的跋涉

当缓存未命中,请求进入网络层。

  1. DNS域名解析:浏览器需要将域名(如 www.example.com)转换成机器可读的IP地址(例如 192.168.1.1)。这个过程被称为DNS解析(DNS域名解析)。
  2. 建立TCP连接:拿到IP后,浏览器需要与服务器建立TCP连接。这里会发生我们熟知的“三次握手”,确保双方收发能力正常。
  3. 判断 HTTP 还是 HTTPS(关键一步):
    在 TCP 连接建立之后,浏览器并不是立刻发送应用层数据,而是要根据 URL 的协议(http:// 还是 https://)进行判断:
    • 如果是 HTTP 请求(默认端口80):直接跳过加密步骤,准备发送明文数据。
    • 如果是 HTTPS 请求(默认端口443):TCP 连接建立后,还需要进行 TLS/SSL 握手。浏览器会向服务器请求数字证书,验证证书的合法性,双方协商生成对称加密密钥(会话密钥)。之后的所有
      HTTP 数据都会通过这个加密通道进行传输。
  4. 构建HTTP请求:无论是明文还是加密,安全通道准备好后,浏览器会根据规范构建HTTP请求(包含请求行、请求头、请求体等),准备发送给服务器。

三、服务器端的接力(Tomcat处理)

请求通过网络连接,抵达了服务端(图中以 Tomcat服务器 为例)。

  1. 请求路由(Servlet映射):Tomcat接收到请求后,会根据请求的资源类型进行分流:
    • 静态请求(如HTML、CSS、JS、图片等):请求会进入Tomcat容器(线程池),Tomcat Context(上下文)根据 URL 映射规则匹配具体的 Servlet,如果没有匹配到业务 Servlet,就会落到 DefaultServlet 处理静态资源,处理完毕后直接返回资源,无需经过复杂的业务逻辑。
    • 动态请求(如API接口调用):请求会进入Tomcat容器(线程池),分配一个线程来处理。
  2. 过滤器(Filter)拦截:动态请求在到达真正的业务代码前,会先经过filter过滤器(如权限校验、日志记录、跨域处理等)。
  3. 业务处理的判断(原生 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 的内部流转:
      1. HandlerMapping:根据请求的 URL 路径,去寻找匹配的 Controller 中的具体方法(如 @RequestMapping 标注的方法)。
      2. HandlerAdapter:负责真正调用找到的 Controller 方法。
      3. 业务逻辑:Controller 方法执行具体的业务逻辑(通常还会调用 Service 层、DAO 层),处理完毕后返回 ModelAndView 或者 @ResponseBody 标注的 JSON 数据。
      4. ViewResolver:如果是返回页面,Spring MVC 会通过视图解析器解析成具体的 HTML/JSP;如果是 JSON,则直接转为数据。

四、响应与最终渲染

服务端处理完毕后,数据开始原路返回。

  1. 返回HTTP响应:无论是原生 Servlet 输出的内容,还是 Spring MVC 的 Controller 返回的数据,最终都会由 Tomcat服务器(Tomcat connector) 封装成 HTTP响应返回给浏览器。(如果是HTTPS,响应数据同样会被加密后传输)
  2. 浏览器接收与渲染:浏览器接收到响应数据后,结合刚才在阶段一未命中的本地缓存策略,开始解析HTML、构建DOM树、加载CSS/JS,最终完成页面渲染,呈现给用户。

转载地址:https://www.cnblogs.com/yonan/p/23334106

posted @ 2026-10-23 08:44  在夏天  阅读(2)  评论(0)    收藏  举报