Protocol Buffer MIME 型別

Protobuf 序列化的標準 MIME 型別。

所有 Protobuf 文件都應具有 MIME 型別 application 和子型別 protobuf,對於 JSON 編碼,根據 標準,應帶有後綴 +json,後跟以下引數

  • encoding 應只設置為 binaryjson,表示相應的格式。
    • 對於子型別 protobuf+jsonencoding 的預設值為 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 引數(encodingcharsetversion)具有未知或非法值,則解析器必須失敗。

當二進位制 proto 透過 HTTP 傳輸時,Protobuf 強烈建議對其進行 Base64 編碼並設定 X-Content-Type-Options: nosniff 以防止 XSS,因為 Protobuf 可能被解析為活動內容。

如果需要,可以向這些 MIME 型別傳遞附加引數,例如指示內容模式的型別 URL;但是 MIME 型別引數絕不能包含編碼選項。