Différence entre les en-têtes HTTP Accept et Content-Type

119

Ainsi, l'en- Accepttête 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- Content-Typetête 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 Acceptet Content-TypeHTTP?

JohnMerlino
la source

Réponses:

155

Comme vous l'avez noté correctement, l'en- tête Accept est utilisé par les clients HTTP pour indiquer au serveur les types de contenu qu'ils accepteront. Le serveur enverra 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 des en -têtes Content-Type. Pourquoi? Eh bien, pensez aux demandes POST ou PUT . Avec ces types de demande, 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 comment le serveur les analysera).

En particulier, pour une requête POST résultant d'une soumission de formulaire HTML, le type de contenu de la requête sera (normalement) l'un des types de contenu de formulaire standard ci-dessous, comme spécifié par l' enctypeattribut sur la <form>balise:

  • application/x-www-form-urlencoded (par défaut, plus ancien, plus simple, un peu moins de temps système pour de petites quantités de texte ASCII simple, 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)
Ilmari Karonen
la source
22
  • Accepter : est ce que le navigateur est capable de digérer, par exemple, toutes les langues que quelqu'un peut comprendre.
  • Content-Type : est le format dans lequel se trouvent les données réelles, par exemple la langue parlée par quelqu'un. Puisque les ordinateurs ne peuvent pas (enfin, ils peuvent maintenant) reconnaître d’autres types comme les gens peuvent dire "oh, il est allemand!" ou "elle parle chinois!"
ionFish
la source
1
Pas nécessairement un navigateur, mais n'importe quel client http.
Jim Aho
20

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)

JRomio
la source
Je sais que je suis en retard, mais je suis curieux de savoir ce qui se passerait si le format de réponse n'était pas envoyé au format "Accepté" par le serveur?
Cri
1
Ce serait au client de décider de @shriek. Je suppose que la plupart des clients (ou navigateurs) http vont "intelligemment" regarder les données réelles et voir ce qu’elles sont vraiment. Peut-être qu'un client pourrait également ignorer la réponse si elle est supposée être du JSON, mais l'analyse échoue car elle semble être autre chose.
Jim Aho
5

C'est une conversation demande-réponse, donc le client

  • envoie une requête de "Content-Type" et
  • s'attend à recevoir la réponse du type de média "Accepter".
Waldemar
la source
Incorrect. Accepter est un en-tête de demande. Voir la réponse acceptée.
darron
2
@darron Non, cette réponse est correcte. Il ne dit pas que ce n'est pas un en-tête de requête, il dit que son objectif est d'indiquer au serveur le type de réponse qu'il s'attend à obtenir. Un peu redondant avec les autres réponses, mais je pense que c'est la plus concise. +1
Todd Menier
0

Acceptez

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.

( source: developer.mozilla.org )

Type de contenu

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 quel type de données est réellement envoyé.

( source: developer.mozilla.org )

Wlad
la source