È necessario specificare il tipo di contenuto nell'intestazione della risposta http?


8

Ad eccezione del documento html, attualmente tutti i file (css, javascript e immagini) forniti dal mio server web non specificano l' content-typeintestazione della risposta http. Mi capita di notare questo perché intendo rimuovere l' typeattributo sia nel mio scripttag sia nel mio linktag, ma ho trovato questa risposta che dice quanto segue:

Il tipo MIME viene anche inviato tramite l'intestazione HTTP Content-Type, quindi l'utilizzo di type = "text / css" sarebbe solo byte extra.


2
Credo che sia necessario specificare Content-Type affinché gli script vengano eseguiti in IE. Questo per impedire agli utenti malintenzionati di caricare script su siti Web di condivisione di immagini.
Brendon,

@Brendon, grazie per aver sottolineato l'implicazione sulla sicurezza. C'è qualche altro aspetto degno di nota, dal punto di vista della sicurezza, supponendo che nessun utente abbia caricato contenuti?
Domanda Overflow

1
Sei sicuro che il tuo server non stia inviando Content-Typeun'intestazione per questi file? Se stai visualizzando la risposta dai file pubblicati dalla cache del browser , probabilmente non vedrai Content-Typeun'intestazione.
MrWhite,

La maggior parte dei server invierà i tipi di mime corretti per impostazione predefinita, quindi a meno che tu non imposti esplicitamente il tuo server per non inviarlo, scommetto che i file vengono inviati con il tipo di mime corretto.
DisgruntledGoat

1
@ w3d, grazie per il tuo commento. Mi rendo conto di aver ricontrollato che ciò che sto leggendo proviene effettivamente dall'intestazione della richiesta di un 304 not modifiedfile. Non esattamente la cache, ma il tipo di contenuto viene eliminato dall'intestazione. Disabilitando la cache, tutto appare di nuovo normale.
Domanda Overflow

Risposte:


7

. Con il protocollo HTTP, clausola 7.2.1 :

“Qualsiasi messaggio HTTP / 1.1 contenente un corpo-entità DOVREBBE includere un campo di intestazione Content-Type che definisce il tipo di supporto di quel corpo. Se e solo se il tipo di supporto non è indicato da un campo Tipo di contenuto, il destinatario PUO 'tentare di indovinare il tipo di supporto tramite l'ispezione del suo contenuto e / o l'estensione (i) dell'URI utilizzata per identificare la risorsa. "

Quindi sì, le intestazioni di risposta dovrebbero contenere Content-Typeintestazione per qualsiasi dato di risposta (chiamato "corpo-entità" nel protocollo, spesso "file" in linguaggio comune). Se viene omesso, al browser è consentito fare le proprie ipotesi sul tipo di dati che ha ottenuto. In molti contesti, il rischio di ipotesi errate è trascurabile, ma questa non è una buona scusa per violare il protocollo.

Attributi come type=text/csse type=text/javascriptnon sono stati necessari, tranne che per alcune specifiche formali, o addirittura utili. Anche se un server invia erroneamente, ad esempio, dati CSS senza Content-Type, i browser li tratteranno come CSS se <link rel=stylesheet ...>fosse l'elemento che ha causato la richiesta. È l' relattributo che conta in quel caso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.