web-dev-qa-db-fra.com

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

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?

118
JohnMerlino

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)
153
Ilmari Karonen
  • Accepter : est ce que le navigateur est capable de digérer, par exemple, tous les langues que quelqu'un peut comprendre
  • Content-Type : est le format dans lequel se trouvent les données réelles, par exemple langue quelqu'un parle. 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!"
22
ionFish

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)

19
JRomio

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".
5
Waldemar

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

( source: developer.mozilla.org )

0
Wlad