Заголовки: 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 ETagContent-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