Unterschied zwischen den HTTP-Headern Accept und Content-Type

119

Der AcceptHeader teilt dem Server also den MIME-Typ der Ressource mit, nach der der Browser sucht. Beispielsweise kann der Server Klartext, HTML, JSON usw. senden.

OK, das macht Sinn, aber wenn ich auf die Content-TypeÜberschrift schaue und es scheint, dasselbe zu tun. Beispielsweise wird dem Server mitgeteilt, dass Text oder JSON gewünscht wird.

Was ist der Unterschied zwischen Acceptund Content-TypeHTTP-Headern?

JohnMerlino
quelle

Antworten:

155

Wie Sie richtig bemerken, wird der Accept-Header von HTTP-Clients verwendet, um dem Server mitzuteilen, welche Inhaltstypen akzeptiert werden. Der Server sendet dann eine Antwort zurück, die einen Content-Type-Header enthält , der dem Client mitteilt, um welchen Inhaltstyp es sich bei dem zurückgegebenen Inhalt handelt.

Wie Sie vielleicht bemerkt haben, können HTTP-Anforderungen auch Content-Type-Header enthalten. Warum? Denken Sie an POST- oder PUT- Anforderungen. Bei diesen Anforderungstypen sendet der Client tatsächlich eine Reihe von Daten als Teil der Anforderung an den Server, und der Content-Type-Header teilt dem Server mit, wie die Daten tatsächlich sind (und bestimmt somit, wie der Server sie analysiert).

Insbesondere für eine POST-Anfrage, die aus einer HTML-Formularübermittlung resultiert, ist der Inhaltstyp der Anfrage (normalerweise) einer der folgenden Standard- Formularinhaltstypen , wie durch das enctypeAttribut auf dem <form>Tag angegeben:

  • application/x-www-form-urlencoded (Standard, älter, einfacher, etwas weniger Aufwand für kleine Mengen einfachen ASCII-Texts, keine Unterstützung für das Hochladen von Dateien)
  • multipart/form-data (Neuere Version bietet Unterstützung für Datei-Uploads und ist effizienter für große Mengen von Binärdaten oder Nicht-ASCII-Text.)
Ilmari Karonen
quelle
22
  • Akzeptieren : ist das, was der Browser verarbeiten kann, z. B. alle Sprachen, die jemand verstehen kann.
  • Inhaltstyp : Gibt an, in welchem ​​Format die Daten vorliegen, z. B. in welcher Sprache sie gesprochen werden. Da Computer andere Typen nicht erkennen können (na ja, jetzt können sie), können die Leute sagen: "Oh, er ist Deutscher!" oder "sie spricht chinesisch!"
ionFish
quelle
1
Nicht unbedingt ein Browser, sondern ein beliebiger http-Client.
Jim Aho
20

Akzeptieren ist wie

Hier ist meine Anfrage und ich möchte dieses Antwortformat akzeptieren

Inhaltstyp ist wie

Hier ist meine Anfrage (oder Antwort) und dies (Inhaltstyp) ist das Format des Inhalts, den ich in meiner Anfrage (oder Antwort) sende.

JRomio
quelle
Ich weiß, ich bin spät dran, aber ich bin gespannt, was passiert, wenn das Antwortformat nicht vom Server im "Accept" -Ed-Format gesendet wird.
Schrei
1
Es wäre Sache des Kunden, sich für @shriek zu entscheiden. Ich vermute, die meisten http-Clients (oder Browser) werden die realen Daten "intelligent" betrachten und sehen, was sie wirklich sind. Möglicherweise könnte ein Client die Antwort auch ignorieren, wenn es sich um JSON handeln soll, aber das Parsen schlägt fehl, weil es anscheinend etwas anderes ist.
Jim Aho
5

Es ist eine Anfrage-Antwort-Konversation, so der Client

  • sendet eine Anfrage vom "Content-Type" und
  • erwartet die Antwort vom Medientyp "Akzeptieren".
Waldemar
quelle
Falsch. Accept ist ein Anforderungsheader. Siehe die akzeptierte Antwort.
Darron,
2
@ Darron Nein, diese Antwort ist richtig. Er sagt nicht, dass es sich nicht um einen Anforderungsheader handelt. Er sagt, dass der Zweck darin besteht, dem Server mitzuteilen, welche Art von Antwort er erwartet, zurück zu kommen. Irgendwie überflüssig mit den anderen Antworten, aber ich denke, es ist die prägnanteste. +1.
Todd Menier
0

Akzeptieren

Der HTTP-Header Accept request gibt an, welche Inhaltstypen, ausgedrückt als MIME-Typen, der Client verstehen kann. Mithilfe der Inhaltsaushandlung wählt der Server dann einen der Vorschläge aus, verwendet ihn und informiert den Client mit dem Antwortheader für den Inhaltstyp über seine Auswahl. Browser legen in Abhängigkeit vom Kontext, in dem die Anforderung ausgeführt wird, angemessene Werte für diesen Header fest: Beim Abrufen eines CSS-Stylesheets wird für die Anforderung ein anderer Wert festgelegt als beim Abrufen eines Bilds, Videos oder Skripts.

( Quelle: developer.mozilla.org )

Inhaltstyp

Der Content-Type-Entity-Header wird verwendet, um den Medientyp der Ressource anzugeben.

In Antworten teilt ein Content-Type-Header dem Client mit, um welchen Inhaltstyp es sich bei dem zurückgegebenen Inhalt handelt. Browser führen in einigen Fällen MIME-Sniffing durch und folgen nicht unbedingt dem Wert dieses Headers. Um dieses Verhalten zu verhindern, können die X-Content-Type-Options des Headers auf nosniff gesetzt werden.

In Anforderungen (wie POST oder PUT) teilt der Client dem Server mit, welcher Datentyp tatsächlich gesendet wird.

( Quelle: developer.mozilla.org )

Wlad
quelle