Protocol Buffer MIME 类型
Protobuf 序列化的标准 MIME 类型。
根据标准,所有 Protobuf 文档的 MIME 类型应为 application
,子类型为 protobuf
。对于 JSON 编码,应使用后缀 +json
,并后跟以下参数
encoding
应仅设置为binary
或json
,分别表示这两种格式。- 对于子类型
protobuf+json
,encoding
的默认值为json
,且不能设置为binary
。对于子类型protobuf
(不含+json
),encoding
的默认值为binary
,且不能设置为json
。 - 即使在 HTTP 响应中使用解析器断路器作为 CORB 缓解措施,也应对 JSON 使用
+json
。
- 对于子类型
- 对于所有 JSON 或文本格式的编码,应将
charset
设置为utf-8
,并且绝不为二进制编码设置此参数。- 如果未指定
charset
,则假定为 UTF-8。建议始终指定charset
,因为当 proto 用于 HTTP 响应时,这可以防止某些攻击向量。
- 如果未指定
- Protobuf 保留了
version
参数,以备将来对我们的线路格式进行版本控制。在线路格式进行版本控制之前,请勿设置此参数。
因此,常见 protobuf 编码的标准 MIME 类型为
application/protobuf
用于序列化的二进制 proto。application/protobuf+json; charset=utf-8
用于 JSON 格式的 proto。
读取 Protobuf 的服务也应处理 application/json
,该类型可用于编码 JSON 格式的 proto。
如果 MIME 参数(encoding
、charset
或 version
)具有未知或非法的值,解析器必须失败。
当通过 HTTP 传输二进制 proto 时,Protobuf 强烈建议对其进行 Base64 编码并设置 X-Content-Type-Options: nosniff
以防止 XSS,因为 Protobuf 有可能被解析为活动内容。
如果需要,可以向这些 MIME 类型传递其他参数,例如指示内容模式的类型 URL;但 MIME 类型参数绝不能包含编码选项。