从输入网址到页面呈现:Web 应用原理与 Spring Boot 后端架构入门
本文是 Java Spring Boot 多人协作平台项目实战系列的第一篇,系统梳理 Web 应用的底层运行原理,帮助初学者在动手写代码之前,先建立起清晰的全局认知。
一、从一次请求说起:浏览器输入淘宝网址后发生了什么?
当你在浏览器地址栏输入 taobao.com 并按下回车,看似简单的一个动作,背后其实触发了一套完整的网络通信流程。理解这个过程,是学习 Web 后端开发的第一步。
整个流程大致如下:
- 浏览器解析 URL,通过 DNS 查询将域名解析为 IP 地址
- 浏览器与目标服务器建立 TCP 连接(三次握手)
- 浏览器基于 TCP 连接发送 HTTP 请求
- 服务器处理请求,返回 HTTP 响应
- 浏览器接收响应,渲染页面
二、HTTP 与 TCP 的关系
初学者常常对 HTTP 和 TCP 感到困惑,觉得它们都是"网络协议",却分不清边界。用一个形象的比喻来理解:
HTTP 是快递单,TCP 是高速公路。
TCP —— 传输层协议
TCP(Transmission Control Protocol)工作在传输层,核心职责是:
- 建立可靠连接:通过三次握手确保双方都已准备好
- 保证数据完整:数据不丢失、不重复、按顺序到达
- 全双工通信:客户端和服务器可以同时收发数据,互不干扰
HTTP —— 应用层协议
HTTP(HyperText Transfer Protocol)工作在应用层,构建在 TCP 之上,核心职责是:
- 规定数据格式:请求报文和响应报文长什么样
- 约定交互方式:如何发起请求、如何响应
HTTP 的本质是一套约定好的文本格式,让客户端和服务器能够以"一问一答"的方式传输数据。
层级关系总结
应用层 → HTTP(规定数据格式与交互语义)
传输层 → TCP(负责可靠传输)
网络层 → IP(负责寻址与路由)
HTTP 依赖 TCP 传输,TCP 负责把 HTTP 报文从 A 端完整地送达 B 端。
三、默认端口约定
不同协议和服务有各自约定俗成的默认端口,开发时需要牢记:
| 协议 / 服务 | 默认端口 |
|---|---|
| HTTP | 80 |
| HTTPS | 443 |
| Spring Boot | 8080 |
当你访问 http://taobao.com 时,实际上等价于 http://taobao.com:80,端口 80 是浏览器默认帮你补上的。Spring Boot 本地开发时默认监听 8080 端口,因此访问地址通常是 http://localhost:8080。
四、负载均衡:大型应用如何应对海量请求?
对于淘宝这样的超大型应用,单台服务器显然无法承载数亿用户的并发请求。这时就需要引入负载均衡器(Load Balancer) 。
工作原理
用户请求
↓
负载均衡器(对外暴露 80/443 端口)
↓ ↓ ↓
服务器A 服务器B 服务器C ...(后端成千上万台)
负载均衡器就像火车站的售票引导员,对外只暴露一个统一入口(如 80 端口),内部根据各服务器的负载情况,将请求分发到压力最小的那台机器上,从而实现水平扩展。
常见的负载均衡策略有:轮询、最少连接数、IP Hash 等。
五、你写的 Web 应用,最终是什么形态?
这是很多初学者没有认真思考过的问题。你用 Spring Boot 写的代码,部署上线后:
它最终会以一个进程的形式,在服务器上持续运行。
这个进程会监听一个端口(比如 8080),等待 TCP 连接的到来。每当有请求进来,进程就会处理并返回响应。这就是 Web 服务最朴素的运行模型。
六、环境差异问题与 Docker 的意义
痛点:环境不一致
开发时用 Java 11,服务器上装的是 Java 8;本地跑得好好的,一部署就报错。这是后端开发中极为常见的"环境差异"问题,轻则功能异常,重则服务直接崩溃。
解法:Docker 容器化
Docker 的核心理念是:
用标准方式交付软件,而不只是交付代码。
通过将应用及其所依赖的运行环境(JDK 版本、配置文件、依赖库等)一起打包成一个镜像(Image) ,在任何机器上运行这个镜像,都能得到完全一致的环境。彻底解决了"在我机器上能跑"的经典难题。
七、Spring Boot 中的静态资源与动态资源
静态资源
静态资源是指内容永远不变的文件,如 HTML、CSS、JavaScript、图片等。Spring Boot 约定将静态资源放在以下目录:
src/main/resources/static/
这些文件会被直接返回给浏览器,服务器不做任何加工处理。
动态资源
动态资源的内容会根据请求参数的不同而变化,典型场景如用户登录、个人主页等。
动态内容的生成有两种主流模式:
1. 后端渲染(SSR,Server-Side Render)
浏览器发起请求 → 服务器查询数据 → 服务器拼接 HTML → 返回完整 HTML → 浏览器直接显示
优点是 SEO 友好、首屏加载快;缺点是服务器压力较大,页面交互体验相对弱。
2. 前端渲染(CSR,Client-Side Render)
浏览器下载 HTML + JS → JS 请求接口数据(JSON) → 前端框架渲染页面
优点是前后端分离、交互体验好;缺点是首屏需要等待 JS 加载,对 SEO 不够友好。
现代项目(包括我们的协作平台)通常采用前后端分离架构,即 CSR 模式:Spring Boot 作为纯后端,只提供 REST API,前端框架(如 Vue/React)负责页面渲染。
八、小结
本节课建立了以下几个核心认知:
| 概念 | 要点 |
|---|---|
| HTTP / TCP | HTTP 是应用层协议,TCP 是传输层协议,HTTP 跑在 TCP 之上 |
| 默认端口 | HTTP=80,HTTPS=443,Spring Boot=8080 |
| 负载均衡 | 统一入口,分发请求,实现水平扩展 |
| Web 应用本质 | 一个监听端口的进程,等待并处理 TCP 连接 |
| Docker | 解决环境差异,标准化软件交付 |
| 静态 vs 动态资源 | 静态资源不变,动态资源按请求生成;SSR vs CSR 两种渲染模式 |
理解这些底层原理,能帮助你在后续开发中遇到问题时,快速定位是网络层、协议层还是应用层的问题,而不是一头雾水。
系列课程:Java SpringBoot 多人协作平台实战 · 第一节