Spec-Zone.ru › HTTP

Заголовки: Repr-Digest

Заголовок Repr-Digest

HTTP-заголовок Repr-Digest запроса и ответа содержит дайджест выбранного представления целевого ресурса. Его можно использовать для проверки целостности всего выбранного представления после его получения и восстановления.

Выбранное представление — это определённый формат ресурса, выбранный посредством согласования содержимого. Сведения о представлении можно определить по заголовкам представления, таким как Content-Language, Content-Type и Content-Encoding.

Дайджест представления относится ко всему представлению, а не к кодированию или разбиению на части сообщений, используемых для его передачи. Заголовок Content-Digest относится к содержимому конкретного сообщения, поэтому его значения будут различаться в зависимости от Content-Encoding и Content-Range каждого сообщения.

Тип заголовка Заголовок представления
Запрещённый заголовок запроса Нет

Синтаксис

Repr-Digest: <digest-algorithm>=<digest-value>

// Multiple digest algorithms
Repr-Digest: <digest-algorithm>=<digest-value>,…,<digest-algorithmN>=<digest-valueN>

Директивы

<digest-algorithm>

Алгоритм, используемый для создания дайджеста представления. Безопасными считаются только два зарегистрированных алгоритма дайджеста: sha-512 и sha-256. К небезопасным (устаревшим) зарегистрированным алгоритмам дайджеста относятся: md5, sha (SHA-1), unixsum, unixcksum, adler (ADLER32) и crc32c.

<digest-value>

Дайджест представления в байтах, вычисленный с помощью <digest-algorithm>. Выбор алгоритма дайджеста также определяет используемую кодировку: sha-512 и sha-256 используют кодировку base64, тогда как некоторые устаревшие алгоритмы дайджеста, например unixsum, используют десятичное целое число. В отличие от ранних черновых версий спецификации, байты дайджеста, закодированные в стандартной base64, заключаются в двоеточия (:, ASCII 0x3A) в соответствии с синтаксисом словарей.

Использование небезопасных алгоритмов дайджеста не рекомендуется, поскольку коллизии можно реально спровоцировать, что снижает полезность дайджеста. Если вы не работаете с устаревшими системами (что маловероятно, поскольку большинство из них будут ожидать устаревший заголовок Digest и не будут понимать эту спецификацию), рассмотрите возможность не указывать Repr-Digest вместо использования небезопасного алгоритма дайджеста.

Описание

Заголовок Digest был определён в предыдущих спецификациях, но оказался проблематичным, поскольку было неясно, к чему именно относился дайджест. В частности, было трудно определить, относился ли дайджест ко всему представлению ресурса или к конкретному содержимому HTTP-сообщения. Поэтому были определены два отдельных заголовка (Content-Digest и Repr-Digest) для передачи дайджестов содержимого HTTP-сообщений и дайджестов представления ресурса соответственно.

Примеры

>

Отправка Repr-Digest пользовательским агентом в запросах

В следующем примере пользовательский агент отправляет дайджест содержимого сообщения, используя SHA-512. Он отправляет и Content-Digest, и Repr-Digest, значения которых различаются из-за Content-Encoding:

POST /bank_transfer HTTP/1.1
Host: example.com
Content-Encoding: zstd
Content-Digest: sha-512=:ABC…=:
Repr-Digest: sha-512=:DEF…=:

{
 "recipient": "Alex",
 "amount": 900000000
}

Сервер может вычислить дайджест полученного содержимого и сравнить результат с заголовками Content-Digest или Repr-Digest, чтобы проверить целостность сообщения. В запросах, подобных приведённому выше примеру, для сервера полезнее Repr-Digest, поскольку он вычисляется по декодированному представлению и будет более согласованным в разных сценариях.

HTTP-ответ, в котором Repr-Digest и Content-Digest совпадают

HTTP-сервер может отправить всё представление без кодирования в одном сообщении. В этом случае Repr-Digest и Content-Digest имеют одинаковые значения для одних и тех же алгоритмов дайджеста:

…
Repr-Digest: sha-256=:AEGPTgUMw5e96wxZuDtpfm23RBU3nFwtgY5fw4NYORo=:
Content-Digest: sha-256=:AEGPTgUMw5e96wxZuDtpfm23RBU3nFwtgY5fw4NYORo=:
…
Content-Type: text/yaml
Content-Encoding: br
Content-Length: 38054
Content-Range: 0-38053/38054
…

[message body]

HTTP-ответы, в которых Repr-Digest и Content-Digest различаются

Сервер может сжать содержимое перед отправкой. В этом случае Content-Digest будет зависеть от Content-Encoding, поэтому его значение будет отличаться от заголовка Repr-Digest в ответе:

…
Repr-Digest: sha-256=:AEGPTgUMw5e96wxZuDtpfm23RBU3nFwtgY5fw4NYORo=:, sha-512=:U59TCCaZPA9Qio3CzHJVAgDnIAut53t5Sgkj2Gv4BvDd0b+OX9QpIdgWkzdXLmBsmvBrf3t5PBt+UrVK6k5dkw==:
Content-Digest: sha-256=:293wcr5IoFAsDCzdoDXR1Qppgf2yxOPO1bvQ3nZQtuI=:, unixsum=54809
…
Content-Type: text/html; charset=utf-8
Content-Encoding: br
…

[message body]

В другом ответе сервер использует другой метод сжатия, в результате чего значение Content-Digest изменяется, но дайджесты Repr-Digest остаются прежними:

…
Repr-Digest: sha-256=:AEGPTgUMw5e96wxZuDtpfm23RBU3nFwtgY5fw4NYORo=:, sha-512=:U59TCCaZPA9Qio3CzHJVAgDnIAut53t5Sgkj2Gv4BvDd0b+OX9QpIdgWkzdXLmBsmvBrf3t5PBt+UrVK6k5dkw==:
Content-Digest: sha-256=:rv9Jivc4TmcacLUshzN3OdX7Hz+ORnQRaiTaIKZQ0zk=:
…
Content-Type: text/html; charset=utf-8
Content-Encoding: zstd
…

[message body]

Успешный обмен HTTP-запросом и ответом с использованием Want-Repr-Digest, Repr-Digest и Content-Digest

Следующий запрос PUT содержит заголовок Want-Repr-Digest, указывающий, что в случае успешного выполнения операции сервер должен включить заголовок Repr-Digest с дайджестом sha-256:

PUT /api/transact HTTP/1.1
Want-Repr-Digest: sha-256=8
Content-Type: text/json
…

[message body]

Сервер отвечает успешным ответом 201 Created, включающим заголовки Repr-Digest и Content-Digest с дайджестами sha-256 представления и содержимого соответственно:

HTTP/1.1 201 Created
Repr-Digest: sha-256=:W8oN3H3CmE/CBpV6ZPNozV2AIDzzQpWL7CCOXyDyDzI=:
Content-Encoding: br
Content-Digest: sha-256=:2IBI7hQn83oTCgB3Z/6apOl91WGoctRfRj/F9gkvVo8=:
…

[message body]

Неуспешный обмен HTTP-запросом и ответом с использованием Repr-Digest

В следующем сообщении пользовательский агент запрашивает ресурс с определённым дайджестом sha-256:

GET /api/last-transaction HTTP/1.1
Accept: text/json
Repr-Digest: sha-256=:2IBI7hQn83oTCgB3Z/6apOl91WGoctRfRj/F9gkvVo8=:
…

Сервер возвращает ответ 406 Not Acceptable, указывая, что операция не выполнена для ресурса с указанным дайджестом. Включается заголовок Repr-Digest со значением дайджеста SHA-256, при котором ответ был бы успешным, если бы пользовательский агент повторил запрос с этим значением:

HTTP/1.1 406 Not Acceptable
Repr-Digest: sha-256=:W8oN3H3CmE/CBpV6ZPNozV2AIDzzQpWL7CCOXyDyDzI=:
…

Спецификации

Спецификация
Поля дайджеста>

Совместимость с браузерами

Этот заголовок не имеет интеграции с браузерами, определённой спецификацией («совместимость с браузерами» неприменима). Разработчики могут задавать и получать HTTP-заголовки с помощью fetch(), чтобы реализовать поведение приложения.

См. также

  • Content-Digest, Want-Content-Digest, Want-Repr-Digest
  • ETag
  • Content-Encoding
  • Руководство по SDK «Цифровые подписи для API» использует Content-Digests для цифровых подписей в HTTP-вызовах (developer.ebay.com)

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Repr-Digest

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API