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)具有未知或非法值,则解析器必须失败。
当二进制 proto 通过 HTTP 传输时,Protobuf 强烈建议对其进行 Base64 编码并设置 X-Content-Type-Options: nosniff 以防止 XSS,因为 Protobuf 可能被解析为活动内容。
如果需要,可以向这些 MIME 类型传递附加参数,例如指示内容模式的类型 URL;但是 MIME 类型参数绝不能包含编码选项。