it-swarm.com.de

Ist Header ('Content-Type: text / plain'); überhaupt notwendig?

Ich habe noch keinen Unterschied mit oder ohne diese Kopfinformation gesehen.

56
omg

Definieren Sie "notwendig".

Es ist notwendig, wenn der Browser wissen soll was der Dateityp ist. PHP setzt automatisch das Content-Type Header zu text/html Wenn Sie es nicht überschreiben, behandelt Ihr Browser es als eine HTML-Datei, die kein HTML enthält. Wenn Ihre Ausgabe HTML-Code enthält, sehen Sie sehr unterschiedliche Ergebnisse. Wenn Sie senden würden:

<b><i>test</i></b>

ein Content-Type: text/html würde ausgeben:

test

wohingegen Content-Type: text/plain würde ausgeben:

<b><i>test</i></b>

TLDR Version: Wenn Sie wirklich nur Text ausgeben, spielt es keine Rolle, aber es ist [~ # ~] [~ # ~]falsch.

102
Jeremy Logan

PHP verwendet standardmäßig den Inhaltstyp "text/html" - ähnlich wie "text/plain" - und dies erklärt, warum Sie keine Unterschiede feststellen. text/plain ist notwendig, wenn Sie den Text so ausgeben möchten, wie er ist (einschließlich <> - Symbole). Beispiele:

header("Content-Type: text/plain");
echo "<b>hello world</b>";
// Output: <b>hello world</b>

header("Content-Type: text/html");
echo "<b>hello world</b>";
// Output: hello world
47

Es ist sehr wichtig, dass Sie dem Browser mitteilen, welche Art von Daten Sie senden. Der Unterschied sollte offensichtlich sein. Versuchen Sie, die Ausgabe der folgenden PHP Datei in Ihrem Browser anzuzeigen;

<?php
header('Content-Type:text/html');
?>
<p>Hello</p>

Du wirst sehen:

hallo

(Beachten Sie, dass Sie die gleichen Ergebnisse erhalten, wenn Sie in diesem Fall die Kopfzeile verpassen - text/html ist die Standardeinstellung von PHP)

Ändern Sie es zu text/plain

<?php
header('Content-Type:text/plain');
?>
<p>Hello</p>

Du wirst sehen:

<p> Hallo </ p>

Warum ist das wichtig? Wenn Sie so etwas in einem PHP-Skript haben, das zum Beispiel von einer Ajax-Anfrage verwendet wird:

<?php
header('Content-Type:text/html');
print "Your name is " . $_GET['name']

Jemand kann einen Link zu einer URL wie http://example.com/test.php?name=%3Cscript%20src=%22http://example.com/eviljs%22%3E%3C/script) setzen % 3E auf ihrer Website, und wenn ein Benutzer darauf klickt, hat er alle seine Informationen auf Ihrer Website für jeden zugänglich gemacht, der den Link erstellt hat. Wenn Sie die Datei als Text/Plain bereitstellen, sind Sie sicher.

Beachten Sie, dass dies ein albernes Beispiel ist. Es ist wahrscheinlicher, dass der Angreifer das ungültige Skript-Tag einem Feld in der Datenbank hinzufügt oder eine Formularübermittlung verwendet.

11
rjmunro

Das Festlegen des Headers für den Inhaltstyp wirkt sich darauf aus, wie ein Webbrowser Ihren Inhalt behandelt. Wenn die meisten gängigen Webbrowser auf einen Inhaltstyp von Text/Plain stoßen, rendern sie die Rohtextquelle im Browserfenster (im Gegensatz zu der in HTML gerenderten Quelle). Es ist der Unterschied zwischen Sehen

<b>foo</b>

oder

foo

Wenn Sie das Objekt XMLHttpRequest verwenden, wirkt sich Ihr Content-Type-Header darüber hinaus darauf aus, wie der Browser die zurückgegebenen Ergebnisse serialisiert. Vor der Übernahme von AJAX Frameworks wie jQuery und Prototype bestand ein häufiges Problem mit AJAX Antworten darin, dass der Inhaltstyp auf text/html anstelle von text/gesetzt war. xml. Ähnliche Probleme würden wahrscheinlich auftreten, wenn der Inhaltstyp text/plain wäre.

7
Alan Storm

Angenommen, Sie möchten eine Anfrage mit dem Status 204: No Content HTTP beantworten. Firefox beschwert sich mit "no element found" in der Konsole des Browsers. Dies ist ein Fehler in Firefox, der seit mehreren Jahren gemeldet, aber nie behoben wurde. Durch das Senden eines Headers "Content-type: text/plain" können Sie diesen Fehler in Firefox verhindern.

1
reggie

nein, das ist nicht so. Hier ist ein Beispiel für die Unterstützung meiner Antwort ----> Der deutliche Unterschied ist sichtbar, wenn Sie sich für die HTTP-Komprimierung entscheiden, mit der Sie die Daten auf dem Weg vom Server zum Client und den Typ der Daten komprimieren können Diese Daten werden automatisch zu "gzip", was dem Browser mitteilt, dass der Browser ein gezippte Daten hat, und es muss pzip sein. Dies ist ein Beispiel, bei dem Typ bei Bowser wirklich wichtig ist.

0
Ashish Agarwal