外观
HTTP 状态码对照
状态码只能说明请求在哪一层结束,不能单独证明问题一定来自 CDN。排查时请同时看响应头、requestId、源站日志和网站详情中的同步状态。
常见状态码
| 状态码 | 常见含义 | 优先检查 |
|---|---|---|
| 200 | 请求成功 | 内容是否正确、缓存是否符合预期 |
| 301 / 302 | 重定向 | Location 是否指向正确域名,是否形成循环 |
| 304 | 客户端可使用缓存 | ETag、Last-Modified 和缓存策略 |
| 400 | 请求格式错误 | URL、请求头、参数和应用校验 |
| 401 | 未认证 | 登录状态、Cookie、Authorization |
| 403 | 被拒绝 | CC、ACL、IP 黑名单、源站权限 |
| 404 | 资源不存在 | 域名绑定、路径、源站路由和大小写 |
| 405 | 方法不允许 | 请求方法、预检请求和源站路由 |
| 408 | 请求超时 | 客户端网络、CDN 超时设置 |
| 429 | 请求过多 | CC/限流规则、API Retry-After |
| 500 | 应用内部错误 | 源站应用日志、发布变更和依赖服务 |
| 502 | 回源无效响应 | 源站进程、协议、端口、Host 和防火墙 |
| 503 | 服务暂不可用 | 源站容量、健康检查和上游维护 |
| 504 | 回源超时 | 源站处理时间、网络连通性和超时配置 |
用 curl 分层定位
bash
# 查看 CDN 返回的状态、缓存和 requestId
curl -sS -D - -o /dev/null https://cdn.example.com/path
# 绕过 CDN 直接测试源站(Host 按实际站点填写)
curl -sS -D - -o /dev/null \
--resolve cdn.example.com:80:203.0.113.10 \
http://cdn.example.com/path不要把生产域名解析临时改到源站来“测试一下”,这会让其他用户绕过 CDN,也会污染证书和缓存验证。优先用 --resolve、临时测试域名或源站内网方式排查。
响应头怎么读
X-Request-Id:提交反馈时最重要的单次请求标识。Age:响应在缓存中的时间,只有命中缓存时才有参考意义。Cache-Control:源站对缓存时间和可缓存性的建议。Via、X-Cache或平台自定义头:用于判断是否经过 CDN,具体以实际响应为准。Retry-After:触发限流或暂时不可用时,建议等待的秒数。
如果响应头中包含敏感 Cookie、内部 IP 或调试信息,不要直接公开粘贴,先删除或打码。