本节摘要:浏览器地址栏敲下回车到页面出现,中间是一场毫秒级的远程对话。本节拆解这场对话的三个要素:URL 是地址,HTTP 是对话规则,状态码是对话结果。GET 与 POST 两种请求的分工是本节的重心——它们决定了后文 Flask 路由怎么写、表单怎么提交。懂了这一节,Web 开发的所有"魔法"都降维成了普通函数调用。
阅读完本节,你应当能够:
前三章的项目是单机程序,本章起轻记账要进入浏览器。直接上框架也能写出能跑的代码,但每个"神奇现象"——刷新就重复提交、表单发不出去、页面 404——都会变成无法解释的灵异事件。先把 HTTP 这层对话规则看透,后文所有框架代码都只是"把规则翻译成 Python"。这一节是全书的分水岭:前面是编程,后面是工程。

https://ledger.example.com/records?month=2026-09&sort=asc 协议 主机名 路径 查询参数
四段各司其职:协议说"用什么方式通信";主机名经域名解析变成服务器 IP;路径定位资源——轻记账里 /records 就是"账目列表"这个资源;查询参数给请求附加条件。第 5 章设计 API 时,路径怎么命名、参数怎么放,都会回到这个结构。
HTTP 方法十来个,入门只关照两个:
| 维度 | GET | POST |
|---|---|---|
| 语义 | 获取资源 | 提交数据、触发处理 |
| 数据位置 | 挂在 URL 查询参数里 | 装在请求正文中 |
| 典型场景 | 查看账目列表、按月筛选 | 提交记账表单、登录 |
| 可否重复点 | 安全,随时刷新 | 会导致重复提交,要防 |
| 浏览器表现 | 可收藏、可回退 | 收藏的是地址,回退有提示 |
一个容易误用的点:改数据的操作不要用 GET。用 GET 做删除,搜索引擎的爬虫、浏览器的预加载都可能"顺手"删你的数据。轻记账的规矩从本章定下:所有查询用 GET,所有增删改用 POST。
调试网页的第一反应从此固定:先看状态码。404 查路由,500 看服务器日志,200 还不对看返回内容——三句话能定位九成问题。
方法与路径之外,请求和响应都带一批头部字段,像信封上的附言,说明"我是谁、我接受什么、我给你的是什么":
请求头(浏览器发出): Host: ledger.example.com 要访问哪台主机 User-Agent: Mozilla/5.0 ... 我是什么浏览器 Accept: text/html,application/json 我能接受哪些格式 Cookie: session=abc123 上次留给我的小纸条 响应头(服务器返回): Content-Type: text/html; charset=utf-8 正文是什么格式什么编码 Set-Cookie: session=abc123 给你一张小纸条收好 Cache-Control: max-age=3600 这份内容一小时内不用再要
这些字段现在只需眼熟,后文都会正式登场:Cookie 是第 5 章登录态的载体;Content-Type 决定服务器怎么解析你的请求、浏览器怎么解析响应;Cache-Control 是第 6 章缓存策略的开关。读报文的能力从今天开始攒——开发者工具里每个请求的标头面板,就是Web 世界的 X 光片。
另一个高频小知识:URL 里的中文与特殊字符会被编码。你访问带中文参数的网址,地址栏里人看着是中文,实际传输时被编成百分号开头的编码串。表单查询出现"乱码参数"时先想到它,浏览器与服务器各自负责编解码,正常情况下你无感,出问题时知道去哪查。
HTTP 本身是明文传输——同一 Wi-Fi 下的任何设备理论上都能窥见报文内容,密码等于明信片寄送。HTTPS 在 HTTP 与 TCP 之间垫了一层加密:证书验证服务器的身份,内容加密传输,篡改会被发现。如今浏览器对纯 HTTP 站点直接标注"不安全",搜索排名也压后。第 6 章部署时你会亲手给轻记账配上免费证书,此处先记住结论:任何要登录、要提交数据的服务,HTTPS 不是可选项。
不写一行代码也能验证本节所学。打开浏览器的开发者工具(F12),切到网络标签页,访问任意网页,点开第一条请求:
变式:在轻记账的思路下口述设计三个网址——查看账目列表(GET 路径 records)、提交一笔账(POST 路径 records)、按月查询(GET 路径带查询参数)。口述通了,4.3 节的代码就是把这些话翻译成 Python。
规则清楚了,还差网页本体的原材料。下一节认识 HTML、CSS、JavaScript 三件套。