1.3 浏览器与服务器基础
Tip
判断哪些代码该在浏览器运行,哪些该在服务器运行,避免把密钥泄露给黑客。
1. 为什么要搞清楚"代码在哪里运行"?
上一章你学会了技术栈,知道要用Next.js、TypeScript这些工具。
但你可能会困惑:这些代码是在我电脑上运行,还是在服务器上运行?
为什么这个问题很重要?
如果你搞混了,会出大问题:
- 把密码写在浏览器端 → 黑客3秒内就能偷走
- 把数据库操作写在浏览器端 → 根本运行不了
- 把所有代码都放服务器 → 网页会卡得要死
就像做饭:
- 有些菜你在家里做(煮泡面)
- 有些菜必须去餐厅做(满汉全席)
- 如果你在家里做满汉全席,厨房会炸掉
所以,你必须知道:哪些代码在浏览器运行,哪些代码在服务器运行。
2. 先用吃饭建立直觉
在学技术概念之前,我们先用吃饭来建立直觉。
场景:你想吃饭
方式1:在家做饭
- 你自己买菜
- 你自己做饭
- 你自己吃
- 优点:快,想吃就吃
- 缺点:只能做简单的菜(煮泡面、炒鸡蛋)
方式2:去餐厅吃饭
- 你告诉服务员要什么菜
- 厨师在后厨做好
- 服务员端上来给你
- 优点:能吃到复杂的菜(满汉全席)
- 缺点:要等一会儿
网站也一样!
- 有些事情在你电脑上做(浏览器)
- 有些事情在服务器上做(服务器)
3. 什么是浏览器?什么是服务器?
现在我们来看技术定义。
浏览器(Browser)
浏览器:运行在用户电脑上的软件,用于显示网页和运行简单的代码。
它是什么?
- 就是你用来上网的软件
- 比如Chrome、Edge、Safari
它能做什么?
- 显示网页(HTML、CSS)
- 运行简单的代码(JavaScript)
- 响应你的点击和输入
它不能做什么?
- ❌ 不能直接访问数据库
- ❌ 不能保存敏感信息(比如密码)
- ❌ 不能做复杂的计算(会卡死)
比喻:浏览器就像你家的厨房
- 可以做简单的菜(煮泡面)
- 不能做复杂的菜(满汉全席)
服务器(Server)
服务器:一台24小时运行的电脑,专门用来处理网站请求和复杂任务。
它是什么?
- 一台一直开着的电脑
- 放在专业的机房里
- 专门用来处理网站请求
它能做什么?
- ✅ 访问数据库
- ✅ 保存敏感信息(密码、密钥)
- ✅ 做复杂的计算
- ✅ 生成网页
比喻:服务器就像餐厅的后厨
- 有专业的厨师
- 有所有的食材
- 能做复杂的菜
4. 浏览器和服务器如何配合?
完整流程
让我们看一个完整的例子:你打开一个网站。
第1步:你输入网址
- 你在浏览器输入
www.example.com - 就像你走进餐厅,拿起菜单
第2步:浏览器发送请求
- 浏览器向服务器说:"我要首页"
- 就像你告诉服务员:"我要一份宫保鸡丁"
第3步:服务器处理请求
- 服务器查询数据库
- 服务器生成网页
- 就像厨师做菜
第4步:服务器返回响应
- 服务器把网页发给浏览器
- 就像服务员把菜端上来
第5步:浏览器显示网页
- 浏览器把网页显示出来
- 就像你开始吃饭
看到了吗?浏览器和服务器是配合工作的!
流程图
graph TD
A[用户输入网址] --> B[浏览器发送请求]
B --> C[服务器处理请求]
C --> D[服务器返回响应]
D --> E[浏览器显示网页]
style A fill:#e1f5ff
style B fill:#fff3e0
style C fill:#f3e5f5
style D fill:#e8f5e9
style E fill:#e1f5ff
5. 两种做饭方式:SSR vs CSR
现代网站有两种"做饭"方式,这是你必须理解的核心概念。
方式1:服务端渲染(SSR) - 私房菜
SSR(Server-Side Rendering):服务器生成完整的网页,浏览器直接显示。
流程:
- 你点菜(发送请求)
- 厨师在后厨把菜完全做好
- 服务员端上来一盘成品
- 你直接吃
技术含义:
- 服务器生成完整的HTML
- 浏览器直接显示
- 不需要额外处理
优点:
- ✅ 快:打开网页立即看到内容
- ✅ SEO好:搜索引擎能看到完整内容
缺点:
- ❌ 每次点击都要重新请求服务器
适用场景:
- 博客文章
- 新闻网站
- 产品介绍页
方式2:客户端渲染(CSR) - 吃火锅
CSR(Client-Side Rendering):服务器只给数据,浏览器自己生成网页。
流程:
- 你点菜(发送请求)
- 厨师只给你汤底和生肉(数据)
- 你自己把肉涮熟(浏览器运行代码)
- 你自己吃
技术含义:
- 服务器只给数据(JSON)
- 浏览器运行JavaScript
- 浏览器自己生成页面
优点:
- ✅ 交互快:点击立即响应
- ✅ 体验好:页面不用刷新
缺点:
- ❌ 首次加载慢
- ❌ SEO不好
适用场景:
- 用户中心
- 聊天窗口
- 管理后台
6. 什么时候用哪种方式?
| 场景 | 推荐方式 | 为什么 |
|---|---|---|
| 📝 博客文章 | SSR(私房菜) | 需要快速显示,需要SEO |
| 📰 新闻网站 | SSR(私房菜) | 需要快速显示,需要SEO |
| 📦 产品介绍页 | SSR(私房菜) | 需要SEO |
| 👤 用户中心 | CSR(火锅) | 需要大量交互 |
| 💬 聊天窗口 | CSR(火锅) | 需要实时更新 |
| 🛠️ 管理后台 | CSR(火锅) | 需要大量交互 |
| 💾 数据库操作 | 必须在服务器 | 安全原因 |
Vibe Coding原则:
- 默认用SSR(私房菜)
- 只有需要大量交互时才用CSR(火锅)
- 数据库操作永远在服务器
7. 动手实验:看看浏览器和服务器的对话
实验步骤
- 🌐 打开浏览器
- 🔧 按F12打开开发者工具
- 📊 点击"Network"(网络)标签
- ✨ 访问任意网站(比如
www.baidu.com)
你会看到:
- 一堆请求和响应
- 每个请求都有类型、大小、时间
类型说明:
Document:服务器返回的HTML(私房菜)Fetch/XHR:服务器返回的数据(火锅食材)JS:JavaScript代码CSS:样式文件Img:图片
这就是浏览器和服务器的对话记录!
8. 避坑指南
| ❌ 不要这样做 | ✅ 应该这样做 | 为什么 |
|---|---|---|
全部用CSR(use client) |
默认用SSR,需要交互才用CSR | 浏览器压力大,SEO差 |
| 在浏览器直接连数据库 | 必须在服务器连数据库 | 不安全,密码会泄露 |
在服务器用window对象 |
window只能在CSR组件用 |
服务器没有浏览器环境 |
| 把API密钥写在前端代码 | API密钥必须放在服务器 | 黑客能直接看到 |
9. 真实案例:AWS密钥泄露事件
Story
2019年,45万人民币的教训
2019年,一位开发者把AWS密钥(相当于银行卡密码)写在了前端代码里。黑客3秒内扫描到密钥,开启数千台服务器挖矿。第二天收到账单:$64,000美元(45万人民币)。
Vibe心法:所有密钥、密码、API Token都必须放在服务器端。在代码提交前,用git grep搜索一下是否有"password"、"secret"、"key"这些关键词。
10. 本章小结
- 🏠 浏览器是你家厨房 - 只能做简单的事
- 🏭 服务器是餐厅后厨 - 能做复杂的事
- 🍲 SSR是私房菜 - 服务器做好端上来,快且SEO好
- 🍲 CSR是火锅 - 浏览器自己做,交互好
- ⚡ Vibe Coding原则 - 默认用SSR,需要交互才用CSR