# 第5-1课:Web运行原理与客户端服务器 ## 一、本课目标 完成本课后,你能够: 1. 解释万维网(World Wide Web,Web)是什么; 2. 区分客户端(Client)、服务器(Server)、前端和后端; 3. 描述浏览器访问后端时的请求响应过程; 4. 理解后端程序为什么不能主动把普通响应随意发给浏览器; 5. 运行一个不依赖网络的请求响应模拟程序。 ## 二、前置知识 - Python函数、字典和条件判断; - 知道程序可以接收输入、处理数据并返回结果; - 不要求学过任何Python Web框架。 ## 三、Web是什么 Web是建立在互联网之上的信息与应用系统。互联网提供计算机之间的连接,Web则约定如何定位资源、发送请求和返回页面或数据。浏览器、手机应用和接口调试工具都可以充当客户端。 客户端主动发起请求,服务器监听请求、执行业务逻辑并返回响应: ```text 用户 → 客户端 → HTTP请求 → 服务器 用户 ← 客户端 ← HTTP响应 ← 服务器 ``` 一次普通请求对应一次响应。服务器若要主动通知客户端,需要轮询、服务器发送事件或WebSocket等额外机制,这些将在后续课程学习。 ## 四、前端与后端 - 前端:直接与用户交互的界面和浏览器端逻辑; - 后端:运行在服务器侧,负责业务规则、权限、数据库和接口; - 数据库:负责持久保存数据,通常不直接暴露给浏览器。 浏览器是客户端的一种,客户端不只有浏览器。Java中的Controller、Service、Repository分层属于服务器内部结构,不等于客户端与服务器的边界。 ## 五、用生活场景理解通信双方 可以把访问网站类比成到餐厅点餐: | Web概念 | 餐厅类比 | 实际职责 | |---|---|---| | 客户端 | 顾客 | 提出明确请求并接收结果 | | HTTP请求 | 点菜单 | 写明想获取什么或提交什么 | | 服务器 | 餐厅服务体系 | 接收请求并组织处理 | | 后端业务代码 | 后厨处理流程 | 校验规则、计算并访问数据 | | HTTP响应 | 送回的餐品和结果单 | 告诉客户端结果与内容 | 类比只能帮助入门:真实HTTP请求不是口头交流,而是双方按照协议组织的数据。 ## 六、输入网址后发生了什么 第一次学习时先掌握以下主干流程: 1. 用户在浏览器输入网址并确认; 2. 浏览器从网址中确定要联系的服务器和资源; 3. 浏览器与服务器建立网络连接; 4. 浏览器发送HTTP请求; 5. 服务器读取请求; 6. 后端根据路径执行对应逻辑,必要时查询数据库; 7. 服务器生成HTTP响应; 8. 浏览器读取响应; 9. 如果响应是HTML,浏览器解析并显示页面;如果响应是JSON,通常交给前端代码处理。 服务器地址解析、连接和HTTP报文将在第二课继续展开。本课先记住:页面不是浏览器凭空产生的,数据需要经过请求与响应往返。 ## 七、页面请求与接口请求 服务器可能返回不同内容: - HTML:描述页面结构,浏览器可以渲染; - CSS:描述页面样式; - JavaScript:在浏览器中执行交互逻辑; - 图片或文件:由浏览器展示或下载; - JSON:结构化数据,常用于前后端接口。 访问一个页面往往不只有一个请求。浏览器取得HTML后,可能继续请求CSS、JavaScript、图片和接口数据。因此开发者工具中看到很多请求是正常现象。 ## 八、完整示例 `web_flow_example.py`用字典表示请求和响应,不建立真实网络连接,目的是先看清四个步骤: 1. 浏览器创建请求; 2. 服务器接收请求; 3. 服务器根据路径处理; 4. 浏览器根据响应展示内容。 ## 九、运行方法 ```powershell cd D:\Code\Python\05_web基础\5_1_Web运行原理与客户端服务器 python web_flow_example.py ``` 命令执行后,Python直接运行本课文件。示例不访问互联网,也不会启动真实服务器,所以任何时候都可以安全重复运行。 ## 十、预期结果 ```text 客户端发送:GET /books 响应状态:200 内容类型:text/html; charset=utf-8 浏览器展示:

图书列表

``` ## 十一、关键代码解析 `browser_send_request()`模拟创建请求;`server_handle_request()`相当于最简单的路由和业务处理;`browser_render_response()`读取服务器返回的数据。这里的字典不是HTTP消息本身,只是帮助观察结构的Python表示。 按执行顺序阅读: 1. Python执行文件底部的入口判断并调用`main()`; 2. `main()`把路径`/books`交给`browser_send_request()`; 3. 函数返回一份包含方法、地址和请求头的模拟请求; 4. `server_handle_request()`检查请求路径; 5. 路径是`/books`,因此返回状态码200和HTML内容; 6. `browser_render_response()`依次输出状态码、内容类型和正文。 把`"/books"`临时改成`"/missing"`,可以观察404分支。实验完成后恢复标准示例。 ## 十二、常见错误 ### 12.1 把Web等同于互联网 互联网是连接基础设施,Web是其上的一种应用体系。电子邮件也使用互联网,但不等于Web页面。 ### 12.2 把服务器理解成一台固定机器 服务器既可指提供服务的程序,也可指运行该程序的计算机。学习后端时通常更关心服务器程序。 ### 12.3 认为后端直接操作页面 后端返回HTML或JSON,浏览器中的前端代码决定如何展示。两者通过请求和响应协作。 ### 12.4 认为一次打开页面只有一个请求 现代页面通常还需要样式、脚本、图片和接口数据,浏览器会继续发送多个请求。 ### 12.5 把“本机”与“服务器”对立起来 服务器程序也可以运行在自己的电脑上。是否叫服务器取决于它是否向客户端提供服务,而不是电脑放在哪里。 ## 十三、课堂练习 打开`practice.py`,完成两个练习。练习文件没有答案,请先独立实现。 ## 十四、本课小结 Web应用最基本的闭环是“客户端发请求,服务器做处理,客户端收响应”。前端、后端和数据库是职责划分,客户端与服务器是通信双方。 ## 十五、验收标准 - 能区分Web与互联网; - 能区分客户端、服务器、前端和后端; - 能按顺序解释一次请求响应; - 能说明一个页面为什么可能产生多个请求; - 能判断HTML与JSON通常由谁处理; - 示例能够独立运行且输出符合预期; - 完成`practice.py`中的练习。