浏览器发来请求后,服务器在后台是怎么把页面交出来的?要分静态资源和动态内容两种情况看。
静态文件 vs 动态生成
- 静态资源直出:像
.css、.js、.png这种提前存在服务器硬盘上的固定文件,Web 服务器(比如 Nginx)收到请求后直接去目录里读出文件原样发回,不用查数据库也不用算逻辑。 - 动态内容渲染:比如你在笔趣城点开一本书
/book?id=1,硬盘上并没有现成的1.html。后端程序(Python Flask/Django、Java、Node.js 等)收到请求后,会先读出参数id=1,去数据库里查出 1 号书的书名、作者和章节,填进 HTML 模板里拼成完整的网页(这叫服务端渲染 SSR),再发回给浏览器。
除了后端拼好 HTML 再发过来的 SSR,现在很多网站也用客户端渲染(CSR,比如 React/Vue 单页应用):服务器先回一个空壳 HTML 和 .js 脚本,浏览器跑起 JS 后再去请求 /api/... 拿 JSON 数据,在浏览器内存里把页面拼出来。在笔趣城里,小说详情页是后端直接渲染好的(SSR),而“我的书架”则是前端 JS 调 /api/bookshelf 拿 JSON 渲染出来的(CSR)。
浏览器能看到什么、看不到什么?
不管你在 Ctrl + U 网页源码里怎么翻,或者在 Network 面板里怎么看,你看到的永远只是服务器处理完之后挑出来发给你的最终结果,看不到服务器内部的运行过程。
比如访问 /book?id=1,后端明明查了数据库,但发到浏览器手里的只有拼好的 HTML,你是不可能在网页源码里看到后端的 Python 代码或 SQL 语句的。反过来,后端的权限检查、密码比对、签名计算也都藏在服务器黑盒里,前端只能看到服务器最后回了什么状态码和数据。