用 BaseHalf 和 AI 入门 HTTP 请求
我们在 BaseHalf 里打开真实的 http-requests 文件夹,把请求行、头部和状态码笔记摆成卡片,把 upstream 写进练习笔记,并回答 401 之后下一次请求该带什么。
读一条 HTTP 交换时,方法、头部和状态码最好分开放在能指给 Agent 看的卡片上。我们在桌面上建了一个普通文件夹,塞进六份短 Markdown,再用 BaseHalf 打开。窗口标题变成 http-requests,侧栏列出每一个文件,每份笔记变成卡片。Claude Code 和 Codex 待在右侧 Agent Area,读我们选中的内容,也读练习笔记里的 upstream。
磁盘上的路径是 Desktop/basehalf-learn-sessions/http-requests/。画布上的文件是这些:
http-requests/
00-goal.md
01-request-line.md
02-headers.md
03-status.md
04-practice.md
sources.md
每张卡片写了什么
00-goal.md 定边界:把一次浏览器请求映射到方法、URL、头部、状态码和正文。
01-request-line.md 钉住一条好读的起始行:
GET /api/books?limit=10 HTTP/1.1方法 + 路径 + 版本。02-headers.md 点名我们常和正文搞混的元数据:Host、Accept、Authorization、Content-Type。03-status.md 留了一小份后面真用到的列表:200 OK、301 重定向、404 未找到、500 服务器错误。
sources.md 链到 MDN HTTP messages、RFC 9110 §9.2.1 Safe Methods 和 MDN 401。这个文件夹以这些页面为准,不以模型为准。
给练习笔记写上 upstream
我们把练习笔记连到三张概念卡和 sources.md。画布上,从 01-request-line、02-headers、03-status、sources 出发的线进入 04-practice;提问时练习卡保持选中(蓝边)。连完之后,04-practice.md 开头是:
upstream:
- 01-request-line.md
- 02-headers.md
- 03-status.md
- sources.md这份列表留在文件里(需要 sidecar 时则在 .bh/mirror/.../upstream.yaml)。选中不会留下:它只在 BaseHalf 开着时存在于 .bh/cache/selection.yaml。该长期喂给练习笔记的背景用连接;只想让 Agent Area 把某一张卡当作这一次的「这个」时用选中。

401 那道练习
练习卡问:拿到 401 响应后,下一次请求该带哪个头部?
我们写在卡片上的回答:Authorization(在拿到凭据之后)。401 表示缺少或无效的身份验证;403 则表示再认证也帮不上忙。
| 概念 | 安全 | 幂等 | 旁边留下的笔记 |
|---|---|---|---|
GET | 是 | 是 | 对齐请求行卡片上的示例形状 |
POST | 否 | 否 | 不适合「只是再取一次书」 |
PUT / DELETE | 否 | 是 | 幂等不等于安全 |
401 与 403 | 不适用 | 不适用 | 401:试凭据;403:凭据解决不了 |
我们选中练习卡,看一眼状态栏,再在 Agent Area 里问:对照 upstream 里的头部、状态笔记和 MDN 401 链接检查这段回答;不要编造 02-headers.md 或文档里没有的头部。
模型还是会滑的地方
把回复当草稿。这条路径上它仍然容易:
若 Agent 和 sources.md 里的链接冲突,留下文档,改画布上的笔记。
还是同一个产品,一场真实会话
BaseHalf 没有替我们发明协议家教。我们打开桌面上的文件夹,摆普通 Markdown,把 upstream 写进练习文件,再让 Claude Code 或 Codex 根据这些文件出题。卡片位置待在 .bh/ 里;该留下的连接待在文件里。这篇帖子按 http-requests 画布上那场真实会话改写,而不是按一棵虚构的大纲树。