web-dev-qa-db-fra.com

Est-il nécessaire de spécifier le type de contenu dans l'en-tête de réponse http?

À l'exception du document html, actuellement, tous les fichiers (css, javascript et images) fournis par mon serveur Web ne spécifient pas le content-type dans l'en-tête de la réponse http. Je remarque ceci alors que j’ai l’intention de supprimer l’attribut type de ma balise script et de ma balise link, mais j’ai trouvé cette réponse qui dit ce qui suit :

Le type MIME est également envoyé via l'en-tête HTTP Content-Type. Par conséquent, l'utilisation de type = "text/css" ne constituerait que des octets supplémentaires.

8
Question Overflow

Oui . Par le protocole HTTP, clause 7.2.1 :

“Tout message HTTP/1.1 contenant un corps d'entité DEVRAIT inclure un champ d'en-tête Content-Type définissant le type de média de ce corps. Si et seulement si le type de média n'est pas indiqué par un champ Content-Type, le destinataire PEUT essayer de deviner le type de média en inspectant son contenu et/ou les extensions de nom de l'URI utilisé pour identifier la ressource. ”

Donc, oui, les en-têtes de réponse doivent contenir Content-Type en-tête pour toutes les données de réponse (appelées "entité-corps" dans le protocole, souvent "fichier" en langage commun). S'il est omis, le navigateur est autorisé à émettre ses propres hypothèses sur le type de données qu'il a reçues. Dans de nombreux contextes, le risque de suppositions erronées est négligeable, mais ce n'est pas une bonne excuse pour violer le protocole.

Des attributs tels que type=text/css et type=text/javascript n'ont pas été nécessaires, sauf par des spécifications formelles, ni même utiles. Même si un serveur envoie de manière incorrecte, par exemple, Données CSS sans Content-Type, les navigateurs les traiteront comme CSS si <link rel=stylesheet ...> était l'élément à l'origine de la demande. C’est l’attribut rel qui importe dans ce cas.

7
Jukka K. Korpela