web-dev-qa-db-fra.com

Paramètres d'en-tête: "Accepter" et "Type de contenu" dans un REST le contexte

Je comprends que le paramètre Accept définit un type de données attendu dans une réponse client envoyée par le serveur. Il est donc utilisé comme en-tête de réponse.

Ma question concerne le Content-type, il est utilisé par un client pour définir le format du corps d'une demande envoyée. Je l'ai toujours utilisé dans le cadre d'une demande client. J'ai donc une demande du client dans laquelle j'ai défini les en-têtes avec Accept et Content-type. Et récemment, je suis tombé sur un projet où le Content-type est défini dans les en-têtes de réponse (donc envoyé par le serveur). Ma question est donc la suivante: Content-type doit être défini dans l’en-tête de la demande du client ou dans l’en-tête de la réponse du serveur ou peut-il être défini sur les deux?

15
Emilien Brigand

Lisez les RFC pertinents. Dans ce cas 7231 :

5.3.2. Acceptez

Le champ d’en-tête "Accept" peut être utilisé par les agents utilisateurs pour spécifier response types de support acceptables.


3.1.1.5. Type de contenu

Le champ d’en-tête "Content-Type" indique le type de support du fichier représentation associée

Donc: Accept indique quel type de réponse du serveur le client peut accepter. Content-type concerne toujours le contenu de la demande ou de la réponse actuelle.

Ainsi, si votre demande n'a pas de charge utile, vous n'utilisez pas d'en-tête de demande de type de contenu.

22
CodeCaster

En-tête Accept est utilisé par les clients HTTP pour indiquer au serveur le type de contenu qu’ils attendent/préfèrent comme réponse. Content-type peut être utilisé à la fois par les clients et les serveurs pour identifier le format des données dans leur demande (client) ou leur réponse (serveur) et ainsi aider l'autre partie à interpréter correctement les informations.

6
Alberto

TL; DR

L'en-tête d'entité Content-Type est utilisé pour indiquer le type de support de la ressource. Dans les réponses, un en-tête Content-Type indique au client le type de contenu du contenu renvoyé. Dans les demandes, telles que POST ou PUT, le client indique au serveur quel type de données est réellement envoyé.

Réponse élaborée

Comme vous l'avez noté correctement, l'en-tête Accept est utilisé par les clients HTTP pour indiquer au serveur quels types de média de réponse sont acceptables. Le serveur, à son tour, renverra ensuite une réponse, qui comprendra l'en-tête Content-Type indiquant au client le type de média effectivement renvoyé.

Maintenant, l'en-tête Content-Type pourrait être sur demande et les réponses également. Pourquoi? Eh bien, pensez aux demandes POST ou PUT. Avec ces types de requête, le client envoie en réalité un ensemble de données au serveur dans le cadre de la requête, et l'en-tête Content-Type indique au serveur la nature des données et détermine ainsi la manière dont le serveur les analysera.

0
Stas