Protocol Buffer MIMEタイプ

Protobufシリアル化のための標準MIMEタイプ。

すべてのProtobufドキュメントは、MIMEタイプをapplication、サブタイプをprotobufとし、標準に従ってJSONエンコーディングの場合はサフィックス+jsonを付け、それに続いて以下のパラメータを指定する必要があります。

  • encodingは、それぞれの形式を示すbinaryまたはjsonのみに設定する必要があります。
    • サブタイプprotobuf+jsonの場合、encodingのデフォルトはjsonであり、binaryに設定することはできません。サブタイプprotobuf+jsonなし)の場合、encodingのデフォルトはbinaryであり、jsonに設定することはできません。
    • CORB対策としてパーサーブレーカーを使用するHTTPレスポンスでも、JSONの場合は+jsonを使用してください。
  • すべてのJSONまたはText形式エンコーディングではcharsetutf-8に設定し、バイナリエンコーディングでは決して設定しないでください。
    • charsetが指定されていない場合はUTF-8とみなされます。プロトがHTTPレスポンスで使用される場合に特定の攻撃ベクトルを防ぐ可能性があるため、常にcharsetを指定することが望ましいです。
  • Protobufは、将来のワイヤー形式のバージョン管理のためにversionパラメータを予約しています。ワイヤー形式がバージョン管理されるまで設定しないでください。

したがって、一般的なprotobufエンコーディングの標準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タイプパラメータにはエンコーディングオプションを**含めてはなりません**。