it-swarm.com.de

Wann wird der Header ('Content-Type: application/json') in verwendet? PHP

Ich habe versucht herauszufinden, was wirklich die Verwendung von header('Content-Type: application/json') in PHP-Skripten ist, und ich habe verschiedene Fragen und Antworten zu stackoverflow zu diesem Thema gefunden, aber ich kann es immer noch nicht ganz verstehen ...

Hier also die Frage: Ich habe diese Codezeile in einigen PHP-Projekten gesehen und versuche zu verstehen 

  • wenn dies verwendet wird, wenn eine andere Webseite dieses aktuelle Skript (z. B. mit Ajax) aufruft, kann die aufrufende Seite einen Json von der PHP-Seite erhalten

ODER 

  • wenn dieses Skript bedeutet, dass sich die PHP-Seite mit json befassen wird, der von einer anderen Webseite gesendet wird. Oder vielleicht noch etwas anderes?

Eine andere Sache, die mir helfen könnte, wenn ich antworte, in letzter Zeit habe ich json von einer Ressource (externe URL) mit cURL abgerufen und ich musste diesen Header (Inhaltstyp: application/json) in die Anfrage einfügen. Habe ich diesen Header an die exertnal-Ressource gesendet, oder war dieser MY-Header, damit ich mit dem zurückgegebenen Json umgehen kann?

vielen Dank

4
naspy971

Ok für diejenigen, die daran interessiert sind, habe ich endlich herausgefunden, dass header('Content-Type: application/json') verwendet wird wenn eine andere Seite das PHP-Skript aufruft, so dass die andere Seite das Ergebnis automatisch als json parsen kann.

Zum Beispiel habe ich in meiner test.php: 

header('Content-type: application/json; charset=utf-8');
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr); // {"a":1,"b":2,"c":3,"d":4,"e":5}

und in meinen main.js

function test() {
    $.ajax({
        url: 'test.php',
        type: 'GET',
        //dataType: 'html',
        success: function (response) {
            alert(response);
        }
    });
};

Wenn dataType nicht auf "json" gesetzt ist oder wenn ich den Header nicht in meiner test.php habe, gibt die Warnung {"a":1,"b":2,"c":3,"d":4,"e":5} aus. Dies ist eine Zeichenfolge (versucht mit typeof (Antwort)) und wenn ich diesen Header oder datentyp habe : "json", ich bekomme [object Object] von der Warnung. Diese Header-Funktion gibt den aufrufenden Seiten an, welche Art von Daten sie zurückgeben, damit Sie wissen, wie sie damit umgehen sollen. In meinem Skript, wenn ich es nicht getan habe Ich habe nicht die Funktion header('Content-Type: application/json'), ich müsste die Antwort im Javascript folgendermaßen analysieren: JSON.parse(response), um es zu einem Json zu machen, aber mit diesem Header habe ich bereits ein Json-Objekt, und ich kann es mit jSON.stringify(response) in HTML analysieren.

6
naspy971

Sie sollten immer Content-Type für jede HTTP-Antwort festlegen, um zu beschreiben, was Sie in dieser Antwort liefern.

Ob es sich um JSON oder etwas anderes handelt und ob für eine AJAX - Anfrage oder eine andere Anfrage.


Sie sollten auch den Content-Type für eine beliebige request setzen, um Ihre POST - Nutzdaten zu beschreiben.

1
SLaks

W3 Beschreibung für den Inhaltstyp

Das Feld Inhaltstyp dient dazu, die im Körper enthaltenen Daten so zu beschreiben, dass der empfangende Benutzeragent einen geeigneten Agenten oder Mechanismus auswählen kann, um die Daten dem Benutzer zu präsentieren, oder auf andere Weise mit den Daten in geeigneter Weise umgehen.

Kurz gesagt, um den Empfänger zu informieren, welche Art von Daten er erhalten hat, und diese entsprechend zu verbrauchen.

0

Wenn Sie in PHP keinen Content-Type-Header im Skript angeben, wird standardmäßig alles, was Sie default-mimetype konfiguriert haben, in Ihrer php.ini-Datei gespeichert, die normalerweise text/html ist.

Durch Aufrufen von header('Content-Type: application/json') wird diese Standardeinstellung überschrieben, sodass das Skript bei Aufforderung mit diesem Content-Type reagiert.

Wenn Sie curl mit einem Content-type:application/json-Header aufrufen, geben Sie den Inhaltstyp für den Anforderungstext und nicht für die erwartete Antwort an.

0
JoshA