首页/网络/协议速查/300 Multiple Choices 多种选择
HTTP 方法与状态码91 条

300 Multiple Choices 多种选择

目标资源有多个可选表示(不同格式/语言/镜像),服务器可给出优选或让客户端自行选择。

协议速查网络更新于 2026-10-13

300 是什么

300 Multiple Choices 表示目标资源存在多个可选的表示(不同格式、语言或镜像),服务器可以在响应体或 Link 头里列出候选,让客户端选择(RFC 9110 §15.4.1)。实践中浏览器不会替用户做选择,服务器也很少主动返回它;现代做法多用内容协商(Accept 系列头)或明确的 301、302 单目标跳转。

基本信息

名称300 Multiple Choices
类别3xx 重定向
规范RFC 9110 §15.4.1
响应内容候选列表,放在响应体或 Link 头里
现状罕见,浏览器不自动选择
替代方案服务端内容协商,或明确的单目标跳转

典型使用场景

  • 同一资源的多种格式(PDF、HTML、纯文本)由一个入口分发
  • 多语言站点:列出 zh-CN、en、ja 等候选版本入口
  • 归档与镜像场景:给出多个可访问的镜像地址
  • 协议排障:确认「页面没跳转」是否因为收到 300 被当普通响应处理
  • 接口设计评审:判断是否真的需要让客户端自行选择表示
  • 老系统维护:识别只实现了 300 的遗留网关行为

响应示意

响应示意
GET /manual HTTP/1.1

HTTP/1.1 300 Multiple Choices
Link: </manual.html>; rel=alternate; type=text/html
Link: </manual.pdf>; rel=alternate; type=application/pdf
# 部分客户端支持用 Location 指定优选版本,多数客户端不做选择

# 实际观察服务端给了哪些候选
curl -si https://www.example.com/manual | grep -iE '^(HTTP|link|location)'

3xx 家族怎么选

状态码语义典型用法
300多个候选,可自行选择多格式、多语言入口
301永久搬走域名或路径永久迁移
302临时跳转灰度发布、登录后回跳
307 与 308保持方法与实体的跳转需要原样重发 POST 的场景
301 与 302 由 Location 单点指路,300 是「多选题」,两者语义不可互换。
现代内容协商由 Accept、Accept-Language 在服务端完成,客户端拿到的仍是 200;用 300 让客户端挑反而增加实现成本。
让客户端选择意味着每个客户端都要理解候选语义,而浏览器与常见库普遍不支持,实际会退化成不可用响应。
若确实需要给用户多个选项,更常见的做法是返回一个正常的 200 选择页,而不是借用 300。

易错点

  • 期待浏览器弹出选择界面多半落空:主流浏览器不实现 300 的交互,用户会看到空白或原始响应
  • 用 300 做迁移会让搜索引擎与用户都困惑:永久迁移用 301,临时跳转用 302 或 307
  • 缺少 Location 或 Link 的 300 等于死路:客户端无从选择,请求变成不可用响应
  • 在 API 中返回 300 会让客户端库抛错或反复重试,破坏自动化调用

数据来源与参考

  • RFC 9110 §15.4.1 300

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌