MIME типы

Стандартные MIME-типы для сериализаций Protobuf.

Все документы Protobuf должны иметь MIME-тип application и подтип protobuf, с суффиксом +json для JSON-кодирований в соответствии со стандартом, с последующими параметрами:

  • encoding должен устанавливаться только в binary или json, обозначая соответствующие форматы.
    • С подтипом protobuf+json параметр encoding по умолчанию имеет значение json и не может быть установлен в binary. С подтипом protobuf (без +json) параметр encoding по умолчанию имеет значение binary и не может быть установлен в json.
    • Используйте +json для JSON, даже в HTTP-ответах, которые используют "parser breakers" в качестве меры смягчения CORB.
  • Установите charset в utf-8 для всех JSON- или Text Format-кодирований и никогда не устанавливайте его для бинарных кодировок.
    • Если charset не указан, предполагается, что он равен UTF-8. Предпочтительно всегда указывать charset, так как это может предотвратить определенные векторы атак, когда protos используются в HTTP-ответах.
  • Protobuf резервирует параметр version для потенциального будущего управления версиями наших wire-форматов. Не устанавливайте его, пока wire-формат не будет версионирован.

Таким образом, стандартные MIME-типы для распространенных кодировок protobuf:

  • application/protobuf для сериализованных бинарных protos.
  • application/protobuf+json; charset=utf-8 для protos в формате JSON.

Сервисы, которые читают Protobuf, также должны обрабатывать application/json, который может использоваться для кодирования protos в формате JSON.

Парсеры должны завершаться ошибкой, если параметры MIME (encoding, charset или version) имеют неизвестные или недопустимые значения.

Когда бинарные protos передаются через HTTP, Protobuf настоятельно рекомендует кодировать их в Base64 и устанавливать X-Content-Type-Options: nosniff для предотвращения XSS, поскольку возможно, что Protobuf будет разобран как активный контент.

Допустимо передавать дополнительные параметры для этих MIME-типов при необходимости, например, URL типа, который указывает на схему содержимого; но параметры MIME-типа не должны включать опции кодирования.