Annexe B. Exemples de digest non sollicité
The following examples demonstrate interactions where a server responds with a Content-Digest or Repr-Digest field, even though the client did not solicit one using Want-Content-Digest or Want-Repr-Digest.
Les exemples suivants démontrent des interactions où un serveur répond avec un champ Content-Digest ou Repr-Digest, même si le client n'en a pas sollicité un en utilisant Want-Content-Digest ou Want-Repr-Digest.
Some examples include JSON objects in the content. For presentation purposes, objects that fit completely within the line-length limits are presented on a single line using compact notation with no leading space. Objects that would exceed line-length limits are presented across multiple lines (one line per key-value pair) with two spaces of leading indentation.
Certains exemples incluent des objets JSON dans le contenu. À des fins de présentation, les objets qui tiennent complètement dans les limites de longueur de ligne sont présentés sur une seule ligne en utilisant une notation compacte sans espace de début. Les objets qui dépasseraient les limites de longueur de ligne sont présentés sur plusieurs lignes (une ligne par paire clé-valeur) avec deux espaces d'indentation.
Checksum mechanisms defined in this document are media-type agnostic and do not provide canonicalization algorithms for specific formats. Examples are calculated inclusive of any space. While examples can include both fields, Content-Digest and Repr-Digest can be returned independently.
Les mécanismes de somme de contrôle définis dans ce document sont agnostiques au type de média et ne fournissent pas d'algorithmes de canonisation pour des formats spécifiques. Les exemples sont calculés en incluant tout espace. Bien que les exemples puissent inclure les deux champs, Content-Digest et Repr-Digest peuvent être renvoyés indépendamment.
B.1. Le serveur renvoie des données de représentation complètes
In this example, the message content conveys complete representation data. This means that in the response, Content-Digest and Repr-Digest are both computed over the JSON object {"hello": "world"} followed by an LF; thus, they have the same value.
Dans cet exemple, le contenu du message transmet des données de représentation complètes. Cela signifie que dans la réponse, Content-Digest et Repr-Digest sont tous deux calculés sur l'objet JSON {"hello": "world"} suivi d'un LF ; ils ont donc la même valeur.
GET /items/123 HTTP/1.1
Host: foo.example
Figure 11: GET Request for an Item
Figure 11 : Requête GET pour un élément
NOTE: '' line wrapping per RFC 8792
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 19
Content-Digest: \
sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:
Repr-Digest: \
sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:
{"hello": "world"}
Figure 12: Response with Identical Repr-Digest and Content-Digest
Figure 12 : Réponse avec Repr-Digest et Content-Digest identiques
B.2. Le serveur ne renvoie aucune donnée de représentation
In this example, a HEAD request is used to retrieve the checksum of a resource.
Dans cet exemple, une requête HEAD est utilisée pour récupérer la somme de contrôle d'une ressource.
The response Content-Digest field-value is computed on empty content. Repr-Digest is calculated over the JSON object {"hello": "world"} followed by an LF, which is not shown because there is no content.
La valeur du champ Content-Digest de la réponse est calculée sur un contenu vide. Repr-Digest est calculé sur l'objet JSON {"hello": "world"} suivi d'un LF, qui n'est pas affiché car il n'y a pas de contenu.
HEAD /items/123 HTTP/1.1
Host: foo.example
Figure 13: HEAD Request for an Item
Figure 13 : Requête HEAD pour un élément
NOTE: '' line wrapping per RFC 8792
HTTP/1.1 200 OK
Content-Type: application/json
Content-Digest: \
sha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:
Repr-Digest: \
sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:
Figure 14: Response with Both Content-Digest and Digest (Empty Content)
Figure 14 : Réponse avec à la fois Content-Digest et Digest (contenu vide)
B.3. Le serveur renvoie des données de représentation partielles
In this example, the client makes a range request and the server responds with partial content.
Dans cet exemple, le client effectue une requête de plage et le serveur répond avec un contenu partiel.
GET /items/123 HTTP/1.1
Host: foo.example
Range: bytes=10-18
Figure 15: Request for Partial Content
Figure 15 : Requête pour un contenu partiel
NOTE: '' line wrapping per RFC 8792
HTTP/1.1 206 Partial Content
Content-Type: application/json
Content-Range: bytes 10-18/19
Content-Digest: \
sha-256=:jjcgBDWNAtbYUXI37CVG3gRuGOAjaaDRGpIUFsdyepQ=:
Repr-Digest: \
sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:
"world"}
Figure 16: Partial Response with Both Content-Digest and Repr-Digest
Figure 16 : Réponse partielle avec à la fois Content-Digest et Repr-Digest
In the response message above, note that the Repr-Digest and Content-Digests are different. The Repr-Digest field-value is calculated across the entire JSON object {"hello": "world"} followed by an LF, and the field appears as follows:
Dans le message de réponse ci-dessus, notez que Repr-Digest et Content-Digest sont différents. La valeur du champ Repr-Digest est calculée sur l'ensemble de l'objet JSON {"hello": "world"} suivi d'un LF, et le champ apparaît comme suit :
NOTE: '' line wrapping per RFC 8792
Repr-Digest: \
sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:
However, since the message content is constrained to bytes 10-18, the Content-Digest field-value is calculated over the sequence "world"} followed by an LF, thus resulting in the following:
Cependant, comme le contenu du message est limité aux octets 10 à 18, la valeur du champ Content-Digest est calculée sur la séquence "world"} suivie d'un LF, ce qui donne ce qui suit :
NOTE: '' line wrapping per RFC 8792
Content-Digest: \
sha-256=:jjcgBDWNAtbYUXI37CVG3gRuGOAjaaDRGpIUFsdyepQ=:
B.4. Le client et le serveur fournissent des données de représentation complètes
The request contains a Repr-Digest field-value calculated on the enclosed representation. It also includes an Accept-Encoding: br header field that advertises that the client supports Brotli encoding.
La requête contient une valeur de champ Repr-Digest calculée sur la représentation incluse. Elle comprend également un champ d'en-tête Accept-Encoding: br qui annonce que le client prend en charge le codage Brotli.
The response includes a Content-Encoding: br that indicates the selected representation is Brotli-encoded. The Repr-Digest field-value is therefore different compared to the request.
La réponse inclut un Content-Encoding: br qui indique que la représentation sélectionnée est codée en Brotli. La valeur du champ Repr-Digest est donc différente de celle de la requête.
For presentation purposes, the response body is displayed as a sequence of hex-encoded bytes because it contains non-printable characters.
À des fins de présentation, le corps de la réponse est affiché sous la forme d'une séquence d'octets codés en hexadécimal car il contient des caractères non imprimables.
NOTE: '' line wrapping per RFC 8792
PUT /items/123 HTTP/1.1
Host: foo.example
Content-Type: application/json
Accept-Encoding: br
Repr-Digest: \
sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:
{"hello": "world"}
Figure 17: PUT Request with Digest
Figure 17 : Requête PUT avec Digest
NOTE: '' line wrapping per RFC 8792
HTTP/1.1 200 OK
Content-Type: application/json
Content-Location: /items/123
Content-Encoding: br
Content-Length: 23
Repr-Digest: \
sha-256=:d435Qo+nKZ+gLcUHn7GQtQ72hiBVAgqoLsZnZPiTGPk=:
8B 08 80 7B 22 68 65 6C 6C 6F
22 3A 20 22 77 6F 72 6C 64 22
7D 0A 03
Figure 18: Response with Digest of Encoded Response
Figure 18 : Réponse avec Digest de la réponse encodée
B.5. Le client fournit des données de représentation complètes et le serveur ne fournit aucune donnée de représentation
The request Repr-Digest field-value is calculated on the enclosed content, which is the JSON object {"hello": "world"} followed by an LF.
La valeur du champ Repr-Digest de la requête est calculée sur le contenu inclus, qui est l'objet JSON {"hello": "world"} suivi d'un LF.
The response Repr-Digest field-value depends on the representation metadata header fields, including Content-Encoding: br, even when the response does not contain content.
La valeur du champ Repr-Digest de la réponse dépend des champs d'en-tête de métadonnées de représentation, y compris Content-Encoding: br, même lorsque la réponse ne contient pas de contenu.
NOTE: '' line wrapping per RFC 8792
PUT /items/123 HTTP/1.1
Host: foo.example
Content-Type: application/json
Content-Length: 19
Accept-Encoding: br
Repr-Digest: \
sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg==:
{"hello": "world"}
HTTP/1.1 204 No Content
Content-Type: application/json
Content-Encoding: br
Repr-Digest: sha-256=:d435Qo+nKZ+gLcUHn7GQtQ72hiBVAgqoLsZnZPiTGPk=:
Figure 19: Empty Response with Digest
Figure 19 : Réponse vide avec Digest
B.6. Le client et le serveur fournissent des données de représentation complètes
The response contains two digest values using different algorithms.
La réponse contient deux valeurs de digest utilisant des algorithmes différents.
For presentation purposes, the response body is displayed as a sequence of hex-encoded bytes because it contains non-printable characters.
À des fins de présentation, le corps de la réponse est affiché sous la forme d'une séquence d'octets codés en hexadécimal car il contient des caractères non imprimables.
NOTE: '' line wrapping per RFC 8792
PUT /items/123 HTTP/1.1
Host: foo.example
Content-Type: application/json
Accept-Encoding: br
Repr-Digest: \
sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg==:
{"hello": "world"}
Figure 20: PUT Request with Digest
Figure 20 : Requête PUT avec Digest
NOTE: '' line wrapping per RFC 8792
HTTP/1.1 200 OK
Content-Type: application/json
Content-Encoding: br
Content-Location: /items/123
Repr-Digest: \
sha-256=:d435Qo+nKZ+gLcUHn7GQtQ72hiBVAgqoLsZnZPiTGPk=:,\
sha-512=:db7fdBbgZMgX1Wb2MjA8zZj+rSNgfmDCEEXM8qLWfpfoNY0sCpHAzZbj\
09X1/7HAb7Od5Qfto4QpuBsFbUO3dQ==:
8B 08 80 7B 22 68 65 6C 6C 6F
22 3A 20 22 77 6F 72 6C 64 22
7D 0A 03
Figure 21: Response with Digest of Encoded Content
Figure 21 : Réponse avec Digest du contenu encodé
B.7. La réponse POST ne fait pas référence à l'URI de la requête
The request Repr-Digest field-value is computed on the enclosed representation (see Section 3.1), which is the JSON object {"title": "New Title"} followed by an LF.
La valeur du champ Repr-Digest de la requête est calculée sur la représentation incluse (voir Section 3.1), qui est l'objet JSON {"title": "New Title"} suivi d'un LF.
The representation enclosed in the response is a multiline JSON object followed by an LF. It refers to the resource identified by Content-Location (see Section 6.4.2 of [HTTP]); thus, an application can use Repr-Digest in association with the resource referenced by Content-Location.
La représentation incluse dans la réponse est un objet JSON multiligne suivi d'un LF. Elle fait référence à la ressource identifiée par Content-Location (voir la section 6.4.2 de [HTTP]) ; ainsi, une application peut utiliser Repr-Digest en association avec la ressource référencée par Content-Location.
POST /books HTTP/1.1
Host: foo.example
Content-Type: application/json
Accept: application/json
Accept-Encoding: identity
Repr-Digest: sha-256=:mEkdbO7Srd9LIOegftO0aBX+VPTVz7/CSHes2Z27gc4=:
{"title": "New Title"}
Figure 22: POST Request with Digest
Figure 22 : Requête POST avec Digest
HTTP/1.1 201 Created
Content-Type: application/json
Content-Location: /books/123
Location: /books/123
Repr-Digest: sha-256=:uVSlinTTdQUwm2On4k8TJUikGN1bf/Ds8WPX4oe0h9I=:
{
"id": "123",
"title": "New Title"
}
Figure 23: Response with Digest of Resource
Figure 23 : Réponse avec Digest de la ressource
B.8. La réponse POST décrit l'état de la requête
The request Repr-Digest field-value is computed on the enclosed representation (see Section 3.1), which is the JSON object {"title": "New Title"} followed by an LF.
La valeur du champ Repr-Digest de la requête est calculée sur la représentation incluse (voir Section 3.1), qui est l'objet JSON {"title": "New Title"} suivi d'un LF.
The representation enclosed in the response describes the status of the request, so Repr-Digest is computed on that enclosed representation. It is a multiline JSON object followed by an LF.
La représentation incluse dans la réponse décrit l'état de la requête, donc Repr-Digest est calculé sur cette représentation incluse. C'est un objet JSON multiligne suivi d'un LF.
Response Repr-Digest has no explicit relation with the resource referenced by Location.
Le Repr-Digest de la réponse n'a pas de relation explicite avec la ressource référencée par Location.
POST /books HTTP/1.1
Host: foo.example
Content-Type: application/json
Accept: application/json
Accept-Encoding: identity
Repr-Digest: sha-256=:mEkdbO7Srd9LIOegftO0aBX+VPTVz7/CSHes2Z27gc4=:
{"title": "New Title"}
Figure 24: POST Request with Digest
Figure 24 : Requête POST avec Digest
HTTP/1.1 201 Created
Content-Type: application/json
Repr-Digest: sha-256=:yXIGDTN5VrfoyisKlXgRKUHHMs35SNtyC3szSz1dbO8=:
Location: /books/123
{
"status": "created",
"id": "123",
"ts": 1569327729,
"instance": "/books/123"
}
Figure 25: Response with Digest of Representation
Figure 25 : Réponse avec Digest de la représentation
B.9. Digest avec PATCH
This case is analogous to a POST request where the target resource reflects the target URI.
Ce cas est analogue à une requête POST où la ressource cible reflète l'URI cible.
The PATCH request uses the application/merge-patch+json media type defined in [RFC7396]. Repr-Digest is calculated on the content that corresponds to the patch document and is the JSON object {"title": "New Title"} followed by an LF.
La requête PATCH utilise le type de média application/merge-patch+json défini dans [RFC7396]. Repr-Digest est calculé sur le contenu qui correspond au document de correctif et est l'objet JSON {"title": "New Title"} suivi d'un LF.
The response Repr-Digest field-value is computed on the complete representation of the patched resource. It is a multiline JSON object followed by an LF.
La valeur du champ Repr-Digest de la réponse est calculée sur la représentation complète de la ressource corrigée. C'est un objet JSON multiligne suivi d'un LF.
PATCH /books/123 HTTP/1.1
Host: foo.example
Content-Type: application/merge-patch+json
Accept: application/json
Accept-Encoding: identity
Repr-Digest: sha-256=:mEkdbO7Srd9LIOegftO0aBX+VPTVz7/CSHes2Z27gc4=:
{"title": "New Title"}
Figure 26: PATCH Request with Digest
Figure 26 : Requête PATCH avec Digest
HTTP/1.1 200 OK
Content-Type: application/json
Repr-Digest: sha-256=:uVSlinTTdQUwm2On4k8TJUikGN1bf/Ds8WPX4oe0h9I=:
{
"id": "123",
"title": "New Title"
}
Figure 27: Response with Digest of Representation
Figure 27 : Réponse avec Digest de la représentation
Note that a 204 No Content response without content, but with the same Repr-Digest field-value, would have been legitimate too. In that case, Content-Digest would have been computed on an empty content.
Notez qu'une réponse 204 No Content sans contenu, mais avec la même valeur de champ Repr-Digest, aurait également été légitime. Dans ce cas, Content-Digest aurait été calculé sur un contenu vide.
B.10. Réponses d'erreur
In error responses, the representation data does not necessarily refer to the target resource. Instead, it refers to the representation of the error.
Dans les réponses d'erreur, les données de représentation ne font pas nécessairement référence à la ressource cible. Au lieu de cela, elles font référence à la représentation de l'erreur.
In the following example, a client sends the same request from Figure 26 to patch the resource located at /books/123. However, the resource does not exist and the server generates a 404 response with a body that describes the error in accordance with [RFC9457].
Dans l'exemple suivant, un client envoie la même requête que celle de la figure 26 pour corriger la ressource située à /books/123. Cependant, la ressource n'existe pas et le serveur génère une réponse 404 avec un corps qui décrit l'erreur conformément à [RFC9457].
The response Repr-Digest field-value is computed on this enclosed representation. It is a multiline JSON object followed by an LF.
La valeur du champ Repr-Digest de la réponse est calculée sur cette représentation incluse. C'est un objet JSON multiligne suivi d'un LF.
HTTP/1.1 404 Not Found
Content-Type: application/problem+json
Repr-Digest: sha-256=:EXB0S2VF2H7ijkAVJkH1Sm0pBho0iDZcvVUHHXTTZSA=:
{
"title": "Not Found",
"detail": "Cannot PATCH a non-existent resource",
"status": 404
}
Figure 28: Response with Digest of Error Representation
Figure 28 : Réponse avec Digest de la représentation de l'erreur
B.11. Utilisation avec les champs de fin et le codage de transfert
An origin server sends Repr-Digest as trailer field, so it can calculate digest-value while streaming content and thus mitigate resource consumption. The Repr-Digest field-value is the same as in Appendix B.1 because Repr-Digest is designed to be independent of the use of one or more transfer codings (see Section 3).
Un serveur d'origine envoie Repr-Digest en tant que champ de fin, afin qu'il puisse calculer la valeur du digest tout en diffusant le contenu et ainsi atténuer la consommation de ressources. La valeur du champ Repr-Digest est la même que dans l'annexe B.1 car Repr-Digest est conçu pour être indépendant de l'utilisation d'un ou plusieurs codages de transfert (voir Section 3).
In the response content below, the string "\r\n" represents the CRLF bytes.
Dans le contenu de la réponse ci-dessous, la chaîne "\r\n" représente les octets CRLF.
GET /items/123 HTTP/1.1
Host: foo.example
Figure 29: GET Request
Figure 29 : Requête GET
NOTE: '' line wrapping per RFC 8792
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Trailer: Repr-Digest
8\r\n
{"hello"\r\n
8\r\n
: "world\r\n
3\r\n
"}\n\r\n
0\r\n
Repr-Digest: \
sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg==:\r\n
Figure 30: Chunked Response with Digest
Figure 30 : Réponse en morceaux avec Digest