プロトコルバッファの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またはテキスト形式のエンコーディングにはcharsetutf-8に設定し、バイナリエンコーディングには決して設定しないでください。
    • charsetが指定されていない場合は、UTF-8とみなされます。プロトがHTTPレスポンスで使用される場合に特定の攻撃ベクトルを防ぐ可能性があるため、常にcharsetを指定することが望ましいです。
  • Protobufは、ワイヤーフォーマットの将来的なバージョン管理のためにversionパラメータを予約しています。ワイヤーフォーマットがバージョン管理されるまで設定しないでください。

したがって、一般的なプロトコルバッファエンコーディングの標準MIMEタイプは以下の通りです。

  • シリアライズされたバイナリプロトにはapplication/protobuf
  • JSON形式のプロトにはapplication/protobuf+json; charset=utf-8

Protobufを読み取るサービスは、JSON形式のプロトをエンコードするために使用される可能性のあるapplication/jsonも処理する必要があります。

MIMEパラメータ(encodingcharset、またはversion)に不明または不正な値がある場合、パーサーは失敗しなければなりません。

バイナリプロトがHTTP経由でトランザクションされる場合、Protobufは、Protobufがアクティブコンテンツとして解析される可能性があるため、XSSを防ぐためにBase64エンコードし、X-Content-Type-Options: nosniffを設定することを強く推奨します。

コンテンツスキーマを示すタイプURLなど、必要に応じてこれらのMIMEタイプに追加のパラメータを渡すことは許容されますが、MIMEタイプパラメータにはエンコーディングオプションを**含めてはなりません**。