Ainsi, l'en-tête Accept
indique au serveur le type MIME de la ressource recherchée par le navigateur. Par exemple, le serveur peut envoyer du texte brut, HTML, JSON, etc.
OK, cela a du sens, mais quand je regarde l’en-tête Content-Type
et qu’il semble faire la même chose. Par exemple, il indique au serveur qu'il souhaite du texte ou JSON.
Alors, quelle est la différence entre les en-têtes HTTP Accept
et Content-Type
?
Comme vous l'avez noté correctement, le Accept header est utilisé par les clients HTTP pour indiquer au serveur les types de contenu qu'ils vont accepter. Le serveur renverra ensuite une réponse contenant un en-tête Content-Type indiquant au client le type de contenu du contenu renvoyé.
Cependant, comme vous l'avez peut-être remarqué, les requêtes HTTP peuvent également contenir en-têtes Content-Type. Pourquoi? Eh bien, pensez aux demandes POST ou PUT . Avec ces types de demandes, le client envoie en réalité un ensemble de données au serveur dans le cadre de la demande, 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).
En particulier, pour une demande POST résultant d'une soumission de formulaire HTML, le type de contenu de la demande sera (normalement) l'un des types types de contenu de formulaire ci-dessous, comme spécifié par l'attribut enctype
sur la balise <form>
:
application/x-www-form-urlencoded
(par défaut, plus ancien, plus simple, un peu moins de surcharge pour de petites quantités de texte simple ASCII, aucun support de téléchargement de fichier)multipart/form-data
(plus récent, ajoute la prise en charge des téléchargements de fichiers, plus efficace pour les grandes quantités de données binaires ou le texte non-ASCII)Accepter c'est comme
Voici ma demande et je voudrais (accepter) ce format de réponse
Content-Type est comme
Voici ma demande (ou réponse) et ceci (type de contenu) est le format du contenu que j'envoie dans ma demande (ou réponse)
C'est une conversation demande-réponse, donc le client
L'en-tête HTTP de la demande d'acceptation indique les types de contenu, exprimés en tant que types MIME, que le client est capable de comprendre. À l'aide de la négociation de contenu, le serveur sélectionne l'une des propositions, l'utilise et informe le client de son choix avec l'en-tête de réponse Content-Type. Les navigateurs définissent des valeurs appropriées pour cet en-tête en fonction du contexte dans lequel la demande est effectuée: lors de l'extraction d'une feuille de style CSS, la valeur de la requête est différente de celle utilisée lors de l'extraction d'une image, d'une vidéo ou d'un script.
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é. Les navigateurs effectueront une détection MIME dans certains cas et ne suivront pas nécessairement la valeur de cet en-tête; Pour éviter ce problème, l'en-tête X-Content-Type-Options peut être défini sur nosniff.
Dans les demandes (telles que POST ou PUT), le client indique au serveur le type de données réellement envoyé.