プロトコルバッファのMIMEタイプ
Protobufのシリアライゼーションのための標準的なMIMEタイプ。
すべてのProtobufドキュメントは、標準に従い、JSONエンコーディングの場合は+json
サフィックス付きで、MIMEタイプapplication
とサブタイプprotobuf
を持つべきです。それに続いて以下のパラメータが続きます。
encoding
は、それぞれの形式を示すbinary
またはjson
にのみ設定されるべきです。- サブタイプが
protobuf+json
の場合、encoding
のデフォルトはjson
であり、binary
に設定することはできません。サブタイプがprotobuf
(+json
なし)の場合、encoding
のデフォルトはbinary
であり、json
に設定することはできません。 - CORB軽減策としてパーサーブレーカーを使用するHTTPレスポンスでも、JSONには
+json
を使用してください。
- サブタイプが
- すべてのJSONまたはテキスト形式のエンコーディングには
charset
をutf-8
に設定し、バイナリエンコーディングには決して設定しないでください。charset
が指定されていない場合は、UTF-8とみなされます。プロトがHTTPレスポンスで使用される場合に特定の攻撃ベクトルを防ぐ可能性があるため、常にcharset
を指定することが望ましいです。
- Protobufは、ワイヤーフォーマットの将来的なバージョン管理のために
version
パラメータを予約しています。ワイヤーフォーマットがバージョン管理されるまで設定しないでください。
したがって、一般的なプロトコルバッファエンコーディングの標準MIMEタイプは以下の通りです。
- シリアライズされたバイナリプロトには
application/protobuf
。 - JSON形式のプロトには
application/protobuf+json; charset=utf-8
。
Protobufを読み取るサービスは、JSON形式のプロトをエンコードするために使用される可能性のあるapplication/json
も処理する必要があります。
MIMEパラメータ(encoding
、charset
、またはversion
)に不明または不正な値がある場合、パーサーは失敗しなければなりません。
バイナリプロトがHTTP経由でトランザクションされる場合、Protobufは、Protobufがアクティブコンテンツとして解析される可能性があるため、XSSを防ぐためにBase64エンコードし、X-Content-Type-Options: nosniff
を設定することを強く推奨します。
コンテンツスキーマを示すタイプURLなど、必要に応じてこれらのMIMEタイプに追加のパラメータを渡すことは許容されますが、MIMEタイプパラメータにはエンコーディングオプションを**含めてはなりません**。