2010-08-10 15 views
78

Soweit ich weiß, sind sie absolut gleich. Doch einige django docs surfen, ich habe dieses Stück Code gefunden:Was ist der Unterschied zwischen ContentType und MimeType

HttpResponse.__init__(content='', mimetype=None, status=200, content_type='text/html')

die mir die beiden aneinander entlang immer überraschen. Die offiziellen Dokumente konnten das Problem in praktischer Weise lösen:

content_type ist ein Alias ​​für Mimetype. Historisch gesehen war dieser Parameter nur genannt MIME-Typ, aber da diese ist eigentlich der Wert im HTTP enthielt Content-Type-Header, kann es auch umfasst die Zeichensatzcodierung, die es Typen mehr als nur einen MIME macht Spezifikation. Wenn der Mimetyp angegeben ist (nicht None), wird dieser Wert verwendet. Andernfalls wird content_type verwendet. Wenn keine angegeben wird, wird die Einstellung DEFAULT_CONTENT_TYPE verwendet.

Allerdings finde ich es nicht genug aufzuklären. Warum benutzen wir 2 verschiedene Bezeichnungen für (fast das gleiche) Ding? Ist "Content-Type" nur ein Name, der in Browseranfragen verwendet wird, und außerhalb davon sehr wenig verwendet wird?

Was ist der Hauptunterschied zwischen den einzelnen, und wann ist es richtig, etwas mimetype im Gegensatz zu content-type anzurufen? Bin ich schade und Grammatik Nazi?

Antwort

42

Warum verwenden wir 2 verschiedene Namen für (fast die gleiche) Sache? Ist "Content-Type" nur ein Name in Browser-Anfragen verwendet, und mit sehr wenig außerhalb verwenden?

Was ist der Hauptunterschied zwischen den jedem, und wenn stimmen etwas MIME-Typen zu nennen, im Gegensatz zu Content-Type? Bin ich schade und Grammatik Nazi?

Der Grund ist nicht nur Abwärtskompatibilität, und ich fürchte, die normalerweise ausgezeichnete Django-Dokumentation ist ein bisschen hand-wellig darüber. MIME (es lohnt sich zumindest den Wikipedia-Eintrag zu lesen) hat seinen Ursprung in der Erweiterung der Internet-Mail und speziell von SMTP. Von dort aus hat das MIME- und MIME-inspirierte Erweiterungsdesign seinen Weg in viele andere Protokolle (wie HTTP hier) gefunden und wird immer noch verwendet, wenn neue Arten von Metadaten oder Daten in einem bestehenden Protokoll übertragen werden müssen. Es gibt Dutzende von RFCs, die MIME für eine Vielzahl von Zwecken diskutieren.

Speziell Content-Type: ist einer unter mehreren MIME-Headern. "Mimetype" klingt zwar veraltet, aber ein Verweis auf MIME selbst ist es nicht. Nenne diese Teil Rückwärtskompatibilität, wenn du willst.

[BTW, das ist ein rein terminologisches Problem, das überhaupt nichts mit Grammatik zu tun hat.Jede Verwendungsfrage unter "Grammatik" zu stellen, ist eine meiner Lieblingsärgernisse. Grrrr.]

0

Warum verwenden wir 2 verschiedene Namen für (fast die gleiche) Sache?

Abwärtskompatibilität, basierend auf Ihrem Zitat aus der Dokumentation.

+0

Das ist in Ordnung, ich habe den praktischen Grund für das Hinzufügen auf Django verstanden. Der Kern der Frage ist jedoch, warum * jeder * die beiden Wörter so gemischt verwendet und ob es wirklich einen Unterschied gibt. – Frangossauro

4

Wenn Sie die Details wissen möchten, siehe Ticket 3526.

Zitat:

Added content_type als Alias ​​für MIME-Typ an den Httpresponse Konstruktor. Es ist ein etwas mehr genauer Name. Basierend auf einem Patch von Simon Willison. Vollständig rückwärts kompatibel.

27

Ich habe immer gesehen content ein Superset von mime zu sein. Der einzige Unterschied ist die optionale Zeichensatzkodierung. Wenn der contentType keine optionale Zeichensatzcodierung enthält, ist er identisch mit einem mimeType. Andernfalls sind der mimeType die Daten vor der Zeichensatzcodierungssequenz.

E.G. text/html; charset=UTF-8

text/html ist die mime
; die zusätzlichen Parameter Indikator ist
charset=UTF-8 wird der Zeichensatz-Kodierungsparameter

E.G. application/msword

application/msword ist die mime
es keine Zeichensatz-Codierung haben kann, da es direkt ein gut geformten octet-stream nicht umfassend Zeichen beschreibt.

+0

Dies ist die richtige Antwort. Die Einstellung der Antwort mime_type (nicht content_type) überschreibt charset nicht und bleibt als UTF-8 erhalten. –

+0

Manchmal einfach als "Medientyp" bezeichnet, ist der MIME-Typ, wie Sie den Typ des Mediums sagen. In bestimmten Spezifikationen sehen wir den Ausdruck "parsable MIME type", der die Verwendung der Eigenschaften im Header "Content-Type" beinhaltet. Die Syntax von 'Content-Type' finden Sie hier: https://tools.ietf.org/html/rfc2045#section-5.1 –

Verwandte Themen