Muss der Inhaltstyp im http-Antwortheader angegeben werden?

8

Mit Ausnahme des HTML-Dokuments geben derzeit alle Dateien (CSS, Javascript und Bilder), die von meinem Webserver bereitgestellt werden, nicht content-typeim HTTP-Antwortheader an. Ich bemerke dies zufällig, als ich beabsichtige, das typeAttribut sowohl in meinem scriptTag als auch in meinem Tag zu entfernen, bin linkaber auf diese Antwort gestoßen, die Folgendes besagt:

Der MIME-Typ wird auch über den HTTP-Content-Type-Header gesendet, sodass die Verwendung von type = "text / css" nur zusätzliche Bytes bedeuten würde.

Fragenüberlauf
quelle
2
Ich glaube, Sie müssen den Inhaltstyp angeben, damit Skripte im IE ausgeführt werden können. Dies soll verhindern, dass böswillige Benutzer Skripts auf Websites für die gemeinsame Nutzung von Bildern hochladen.
Brendon
@Brendon, danke, dass Sie auf die Auswirkungen auf die Sicherheit hingewiesen haben. Gibt es einen anderen Aspekt, der in Bezug auf die Sicherheit erwähnenswert ist, vorausgesetzt, kein Benutzer hat Inhalte hochgeladen?
Frage Überlauf
1
Sind Sie sicher, dass Ihr Server keinen Content-TypeHeader für diese Dateien sendet ? Wenn Sie die Antwort von Dateien anzeigen, die aus Ihrem Browser-Cache bereitgestellt werden, wird wahrscheinlich kein Content-TypeHeader angezeigt .
MrWhite
Die meisten Server werden den richtigen Mime - Typen standardmäßig zu senden, so dass , wenn Sie Ihren Server explizit festgelegt , um es nicht zu senden, ich bin die Dateien Wetten sind mit dem korrekten MIME - Typ gesendet werden.
DisgruntledGoat
1
@ w3d, danke für deinen Kommentar. Nachdem ich erneut überprüft habe, stelle ich fest, dass das, was ich gerade lese, tatsächlich aus dem Anforderungsheader einer 304 not modifiedDatei stammt. Nicht genau der Cache, aber der Inhaltstyp wird aus dem Header entfernt. Wenn Sie den Cache deaktivieren, wird alles wieder normal angezeigt.
Frage Überlauf

Antworten:

7

Ja . Nach dem HTTP-Protokoll, Abschnitt 7.2.1 :

„Jede HTTP / 1.1-Nachricht, die einen Entity-Body enthält, sollte ein Content-Type-Header-Feld enthalten, das den Medientyp dieses Body definiert. Wenn und nur wenn der Medientyp nicht durch ein Feld für den Inhaltstyp angegeben wird, kann der Empfänger versuchen, den Medientyp durch Überprüfung seines Inhalts und / oder der Namenserweiterung (en) des URI, der zur Identifizierung der Ressource verwendet wird, zu erraten. “

Ja, die Antwortheader sollten einen Content-TypeHeader für alle Antwortdaten enthalten (im Protokoll als "Entity-Body" bezeichnet, häufig als "Datei" in der gemeinsamen Sprache). Wenn es weggelassen wird, kann der Browser seine eigenen wilden Vermutungen über die Art der Daten anstellen, die er erhalten hat. In vielen Zusammenhängen ist das Risiko falscher Vermutungen vernachlässigbar, aber dies ist keine gute Entschuldigung für einen Verstoß gegen das Protokoll.

Attribute wie type=text/cssund type=text/javascriptwaren nicht notwendig, außer durch einige formale Spezifikationen oder sogar nützlich. Selbst wenn ein Server z. B. CSS-Daten falsch sendet Content-Type, behandeln Browser die Daten als CSS, wenn dies <link rel=stylesheet ...>das Element war, das die Anforderung verursacht hat. relIn diesem Fall kommt es auf das Attribut an.

Jukka K. Korpela
quelle