2010-08-10 13 views
78

Per quanto ne so, sono assolutamente uguali. Tuttavia, la navigazione alcuni documenti Django, ho trovato questo pezzo di codice:Qual è la differenza di ContentType e MimeType

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

che mi sorprende i due andare d'accordo tra di loro. I documenti ufficiali sono stati in grado di risolvere il problema in modo pratico:

content_type è un alias per mimetype. Storicamente, questo parametro è stato solo chiamati tipomime, ma poiché questo è realtà il valore compreso nell'intestazione Content-Type intestazione HTTP, può anche includono la codifica di caratteri, che rende più di un tipo MIME specifica. Se mimetype è specificato (non None), tale valore è utilizzato. Altrimenti, viene utilizzato content_type. Se non viene dato nessuno, viene utilizzata l'impostazione DEFAULT_CONTENT_TYPE.

Tuttavia, non lo trovo abbastanza chiaro. Perché usiamo 2 nomi diversi per (quasi la stessa cosa)? "Content-Type" è solo un nome utilizzato nelle richieste del browser e con un uso limitato al di fuori di esso?

Qual è la differenza principale tra ciascuna di esse e quando è giusto chiamare mimetype rispetto a content-type? Sono pessimo e grammatico nazista?

risposta

42

Perché usiamo 2 nomi diversi per lo (quasi la stessa cosa)? "Content-Type" è solo un nome utilizzato nelle richieste del browser e con un uso molto limitato di al di fuori di esso?

Qual è la differenza principale tra la ciascuno, e quando è giusto chiamare qualcosa tipo MIME al contrario di tipo di contenuto? Sono pessimo e la grammatica nazista?

Il motivo non è solo la compatibilità con le versioni precedenti, e temo che la documentazione Django di solito eccellente sia un po 'ondulata al riguardo. MIME (vale davvero la pena di leggere almeno la voce di Wikipedia) ha la sua origine nell'estensione della posta Internet e in particolare nello SMTP. Da lì, il design di estensione ispirato a MIME e MIME ha trovato la sua strada in molti altri protocolli (come HTTP qui), ed è ancora in uso quando devono essere trasmessi nuovi tipi di metadati o dati in un protocollo esistente. Ci sono dozzine di RFC che trattano il MIME usato per una miriade di scopi.

In particolare, Content-Type: è uno tra più intestazioni MIME. "Mimetype" in effetti suona obsoleto, ma non lo è un riferimento al MIME stesso. Chiama quella parte di compatibilità con le versioni precedenti, se vuoi.

[BTW, questo è puramente un problema di terminologia che non ha assolutamente nulla a che fare con la grammatica.Presentare tutte le domande d'uso sotto "grammatica" è una mia mancanza. Grrrr.]

0

Perché usiamo 2 nomi diversi per (quasi la stessa cosa)?

Compatibilità con versioni precedenti, in base alla citazione dalla documentazione.

+0

Questo è ok, ho capito il motivo pratico per aggiungerlo al django. Tuttavia, il nocciolo della domanda è il motivo per cui * tutti * usano le due parole così mescolate, e se c'è davvero una differenza dopo tutto. – Frangossauro

4

Se si desidera conoscere i dettagli, vedere il biglietto 3526.

Citazione:

Aggiunto content_type come alias per mimetype alla HttpResponse costruttore. È leggermente più preciso con il nome . Basato su una patch di Simon Willison. Completamente indietro compatibile.

27

Ho sempre visto contentType come un superset di mimeType. L'unica differenza è la codifica del set di caratteri opzionale. Se contentType non include una codifica di set di caratteri facoltativi, è identica a un mimeType. Altrimenti, il mimeType è i dati precedenti alla sequenza di codifica del set di caratteri.

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

text/html è il mimeType
; è l'ulteriore indicatore parametri
charset=UTF-8 è il set di caratteri parametro di codifica

E.G. application/msword

application/msword rappresenta l'mimeType
Esso non può avere una codifica di caratteri come descrive direttamente una ben formate octet-stream caratteri non comprendenti.

+0

Questa è la risposta corretta. L'impostazione della risposta mime_type (non content_type) non sovrascrive il charset e rimane come UTF-8. –

+0

A volte chiamato semplicemente "tipo di media", il tipo MIME è come dici tu il tipo di media. In alcune specifiche vedremo il termine "tipo MIME parsable", che include l'uso delle proprietà nell'intestazione 'Content-Type'. La sintassi di 'Content-Type' può essere trovata qui: https://tools.ietf.org/html/rfc2045#section-5.1 –

Problemi correlati