4.1 Web 工作原理


4.1 Web 工作原理

本节摘要:浏览器地址栏敲下回车到页面出现,中间是一场毫秒级的远程对话。本节拆解这场对话的三个要素:URL 是地址,HTTP 是对话规则,状态码是对话结果。GET 与 POST 两种请求的分工是本节的重心——它们决定了后文 Flask 路由怎么写、表单怎么提交。懂了这一节,Web 开发的所有"魔法"都降维成了普通函数调用。

先把目标钉住

阅读完本节,你应当能够:

  1. 拆解一个 URL 的协议、主机、路径、查询参数四段结构
  2. 画出一次请求-响应往返的完整流程
  3. 区分 GET 与 POST 的语义,判断什么操作该用哪个
  4. 认识 200、301、404、500 四个常见状态码的含义

全书位置:为什么先讲协议再写代码

前三章的项目是单机程序,本章起轻记账要进入浏览器。直接上框架也能写出能跑的代码,但每个"神奇现象"——刷新就重复提交、表单发不出去、页面 404——都会变成无法解释的灵异事件。先把 HTTP 这层对话规则看透,后文所有框架代码都只是"把规则翻译成 Python"。这一节是全书的分水岭:前面是编程,后面是工程。

图 4-1 一次请求的完整旅程

图 4-1 一次请求的完整旅程

URL:网络世界的门牌号

https://ledger.example.com/records?month=2026-09&sort=asc 协议 主机名 路径 查询参数

四段各司其职:协议说"用什么方式通信";主机名经域名解析变成服务器 IP;路径定位资源——轻记账里 /records 就是"账目列表"这个资源;查询参数给请求附加条件。第 5 章设计 API 时,路径怎么命名、参数怎么放,都会回到这个结构。

GET 与 POST:读和写的分工

HTTP 方法十来个,入门只关照两个:

维度 GET POST
语义 获取资源 提交数据、触发处理
数据位置 挂在 URL 查询参数里 装在请求正文中
典型场景 查看账目列表、按月筛选 提交记账表单、登录
可否重复点 安全,随时刷新 会导致重复提交,要防
浏览器表现 可收藏、可回退 收藏的是地址,回退有提示

一个容易误用的点:改数据的操作不要用 GET。用 GET 做删除,搜索引擎的爬虫、浏览器的预加载都可能"顺手"删你的数据。轻记账的规矩从本章定下:所有查询用 GET,所有增删改用 POST。

状态码:对话结果的三位数

  • 200 OK:成功。页面正常返回
  • 301 / 302:重定向。"你要的挪地方了,去新地址"——表单提交成功后跳回列表页用的就是它
  • 404 Not Found:请求的路径不存在。路由没配、地址敲错
  • 500 Server Error:服务器内部炸了。Python 代码抛了没接住的异常

调试网页的第一反应从此固定:先看状态码。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 与 HTTPS:明信片与密封信

HTTP 本身是明文传输——同一 Wi-Fi 下的任何设备理论上都能窥见报文内容,密码等于明信片寄送。HTTPS 在 HTTP 与 TCP 之间垫了一层加密:证书验证服务器的身份,内容加密传输,篡改会被发现。如今浏览器对纯 HTTP 站点直接标注"不安全",搜索排名也压后。第 6 章部署时你会亲手给轻记账配上免费证书,此处先记住结论:任何要登录、要提交数据的服务,HTTPS 不是可选项

演练:亲眼看一次对话

不写一行代码也能验证本节所学。打开浏览器的开发者工具(F12),切到网络标签页,访问任意网页,点开第一条请求:

  • 标头区域能看到请求方法、状态码、主机、各类头部
  • 用表单登录一次,找到那条 POST 请求,看它的正文里躺着你的表单数据
  • 故意访问一个不存在的路径,观察 404 如何出现

变式:在轻记账的思路下口述设计三个网址——查看账目列表(GET 路径 records)、提交一笔账(POST 路径 records)、按月查询(GET 路径带查询参数)。口述通了,4.3 节的代码就是把这些话翻译成 Python。

易错点清单

  • 把 GET 用于删除或修改:被爬虫或预加载"误触发",改数据一律 POST
  • 分不清路径与查询参数:定位资源用路径,附加条件用参数,混用会让路由设计混乱
  • 见到 500 只会刷新:500 是服务器代码崩了,去服务器日志找 Python 的异常栈
  • 以为服务器记得用户:HTTP 无状态,"记得人"靠 Cookie 与会话机制,第 5 章认证一节细讲

本节要点回顾

  • URL 四段:协议、主机、路径、查询参数
  • 请求-响应一来一回,浏览器主动、服务器被动,HTTP 无状态
  • GET 读、POST 写,改数据的操作永远不用 GET
  • 状态码定位问题:200 成、30x 跳、404 找路由、500 看日志
  • 框架只是翻译官:把对话规则翻译成 Python 函数调用

规则清楚了,还差网页本体的原材料。下一节认识 HTML、CSS、JavaScript 三件套。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U