--- title: "1.3 浏览器与服务器基础" description: "理解 Web 应用的运行环境" chapter: "第一章" --- # 1.3 浏览器与服务器基础 > **阅读完本节后,你将会收获:** > > - 理解浏览器和服务器的基本职责及协作方式 > - 掌握开发环境(localhost)与生产环境的区别 > - 了解为什么 TypeScript 需要编译以及 Node.js 的作用 > - 区分客户端代码与服务端代码的运行位置 > 序言中提到的"浏览器看不懂 TypeScript",是因为浏览器和服务器的职责不同。 ## 基本概念 **浏览器**(Chrome、Firefox、Safari)运行在用户电脑上,只能理解 HTML、CSS、JavaScript。 **服务器**是远程计算机,运行 Web 服务器软件(如 Nginx、Apache),响应浏览器请求并返回数据。 **客户端** = 用户设备(浏览器、手机 App),**服务端** = 提供服务的一方(服务器、API)。 ## Web 应用工作流程 ```mermaid sequenceDiagram participant 用户 participant 浏览器 participant 服务器 用户->>浏览器: 输入网址 浏览器->>服务器: 发送请求 服务器->>浏览器: 返回 HTML/数据 浏览器->>用户: 显示页面 ``` ::: details 🌐 点击体验:浏览器与服务器的交互 > 💡 **练习**:点击"播放演示"观看完整的请求-响应流程,然后点击浏览器或服务器查看各自的能力。 > > 🎯 **核心概念**:浏览器发送请求,服务器处理并返回数据,浏览器再渲染成页面。 ::: ## 浏览器 vs 服务器 | | 浏览器(客户端) | 服务器(服务端) | |---|-----------------|-----------------| | **职责** | 渲染页面、执行交互、请求数据 | 处理业务、查询数据库、返回结果 | | **存储** | Cookie、LocalStorage | 文件系统、数据库 | | **能运行** | HTML、CSS、JavaScript | Node.js、Python、Go | | **不能运行** | TypeScript、后端语言 | 浏览器 API | ## 为什么需要 Node.js TypeScript 代码需要编译才能在浏览器运行,这个编译过程需要一个运行环境: ```mermaid graph LR A[TypeScript代码] --> B[Node.js运行环境] B --> C[编译工具] C --> D[JavaScript代码] D --> E[浏览器执行] ``` **Node.js 的作用**: - 在你的电脑上运行构建工具 - 编译 TypeScript 为 JavaScript - 打包代码 - 启动开发服务器 ::: tip 现代前端开发都需要 Node.js 涉及以下情况就必须安装: - TypeScript 项目(需要编译) - 使用 npm 包(需要管理依赖) - 运行构建工具(Vite、Webpack、Next.js) - 本地开发(启动开发服务器) ::: ## 开发环境 vs 生产环境 | | 开发环境(Localhost) | 生产环境(公网) | |---|---------------------|-----------------| | **位置** | 你的电脑 | 远程服务器 | | **地址** | `localhost:3000` | `https://example.com` | | **代码** | 未压缩、带调试信息 | 压缩、混淆 | | **错误** | 显示详细堆栈 | 只显示必要信息 | | **更新** | 热重载(自动刷新) | 需要重新部署 | ## 运行环境差异 **服务器可以访问**:文件系统、数据库、环境变量、所有网络请求 **浏览器只能访问**:页面内容、用户设备(有限权限)、同源请求 ::: tip 代码运行在哪里? 写代码时要清楚代码在哪里执行: - **前端代码**:在浏览器运行,用户能看到 - **后端代码**:在服务器运行,用户看不到 - **API 路由**:Next.js 特殊,既能访问服务器资源,又能响应前端请求 ::: ## 相关内容 - 详见:[1.1 代码格式演变](./01-code-formats.md) - 详见:[1.2 技术栈概念](./02-tech-stack.md) - 后续:[1.5 包管理与项目配置](./05-package-manager-and-config.md) - 详见:[第十章 Localhost 与公网访问](../10-localhost-public-access/)