HTTP、Fetch 与响应契约:练习答案
方法、幂等与状态码
GET/HEAD 读取,POST 通常创建,PUT 用完整资源替换,PATCH 做部分更新,DELETE 删除。答案应说明重试边界:GET 在服务端无副作用时可重试;POST 必须使用幂等键或由服务端去重,不能只因为网络超时就再次创建。
Headers、Content-Type 与缓存
请求的 Accept 表示客户端能解析什么,Content-Type 表示发送体是什么。发送 JSON 时设置 Content-Type: application/json 并 JSON.stringify;响应先检查 response.ok 和 content-type,再决定是否 json()。缓存策略由 Cache-Control、ETag 和请求 cache 选项共同决定。
JSON 解析与错误契约
js
async function getJson(url, signal) {
const response = await fetch(url, { signal })
const type = response.headers.get('content-type') ?? ''
if (!response.ok) throw new Error(`http:${response.status}`)
if (!type.includes('application/json')) throw new Error('contract:not-json')
try { return await response.json() } catch { throw new Error('contract:invalid-json') }
}404/500、网络异常、取消和 JSON 解析失败应进入不同状态;空数组是成功的 empty,不是错误。答案需记录状态码、错误分类和取消时 signal.aborted 的值。
章节入口核对
以下入口对应本章概览或综合练习,答案核对沿用本章各知识点的实现与日志。