В чем разница ContentType и MimeType

103

Насколько я знаю, они абсолютно равны. Однако, просматривая некоторые документы django, я нашел этот фрагмент кода:

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

что удивляет меня, двое ладят друг с другом. Официальные документы смогли решить проблему практическим способом:

content_type - это псевдоним для mimetype. Исторически этот параметр назывался только mimetype, но поскольку это фактически значение, включенное в заголовок HTTP Content-Type, он также может включать кодировку набора символов, что делает его больше, чем просто спецификацией типа MIME. Если указан mimetype (не None), используется это значение. В противном случае используется content_type. Если ни один из них не указан, используется параметр DEFAULT_CONTENT_TYPE.

Однако я не нахожу это достаточно проясняющим. Почему мы используем два разных наименования для (почти одного и того же) предмета? Является ли Content-Type просто именем, используемым в запросах браузера, и очень мало используется вне его?

В чем основное различие между каждым из них и когда правильно что-то называть, mimetypeа не как content-type? Я жалкий и грамматически нацистский?

Frangossauro
источник

Ответы:

54

Почему мы используем два разных наименования для (почти одного и того же) предмета? Является ли Content-Type просто именем, используемым в запросах браузера, и очень мало используется вне его?

В чем основное различие между каждым из них и когда правильно называть что-то mimetype, а не content-type? Я что, жалкий и грамматически нацистский?

Причина не только в обратной совместимости, и я боюсь, что обычно отличная документация по Django немного неоднозначна. MIME (действительно стоит прочесть хотя бы статью в Википедии) берет свое начало в расширении интернет-почты и, в частности, SMTP. Отсюда дизайн расширений, вдохновленный MIME и MIME, нашел свое отражение во многих других протоколах (например, здесь HTTP) и до сих пор используется, когда новые виды метаданных или данных необходимо передать в существующем протоколе. Существуют десятки RFC, в которых обсуждается использование MIME для множества целей.

В частности, Content-Type:это один из нескольких заголовков MIME. «Mimetype» действительно кажется устаревшим, но ссылка на сам MIME - нет. Назовите эту часть обратной совместимостью, если хотите.

[Кстати, это чисто терминологическая проблема, которая не имеет ничего общего с грамматикой. Записывать каждый вопрос об использовании в рубрику «грамматика» - моя любимая мозоль. Grrrr.]

Chryss
источник
49

Я всегда рассматривал contentType как надмножество mimeType. Единственное отличие состоит в необязательной кодировке набора символов. Если contentType не включает необязательную кодировку набора символов, то он идентичен mimeType. В противном случае mimeType - это данные, предшествующие последовательности кодирования набора символов.

НАПРИМЕР text/html; charset=UTF-8

text/htmlmimeType
;- индикатор дополнительных параметров
charset=UTF-8- параметр кодировки набора символов

НАПРИМЕР application/msword

application/mswordэто mimeType.
Он не может иметь кодировку набора символов, поскольку описывает правильно сформированный, octet-streamне содержащий символов напрямую.

Реджи Кэри
источник
1
Это правильный ответ. Установка ответа mime_type (не content_type) не отменяет кодировку и остается как UTF-8.
Микко Охтамаа
Иногда MIME-тип называют просто «типом носителя». Это, как вы говорите, тип носителя. В некоторых спецификациях мы увидим термин «анализируемый тип MIME», который включает использование свойств в Content-Typeзаголовке. Синтаксис Content-Typeможно найти здесь: tools.ietf.org/html/rfc2045#section-5.1
Джош Хабдас,
Тем не менее, на мой взгляд, mime-type - это очень узкий термин, ограничивающий себя почтой, а content-type - это простой английский термин для «типа содержимого». Так что, на мой взгляд text/html, это тоже контентный тип, даже если люди склонны называть это MIME. Кроме того, новое имя media-typeеще более расплывчато, поскольку медиа - это 100 разных вещей. BBC - это СМИ! DVD - это медиа! И можно было бы возразить, что поток данных - это не «носитель», а «носитель».
user2173353
4

Если вы хотите узнать подробности, см. Билет 3526 .

Цитата:

Добавлен content_type в качестве псевдонима для mimetype в конструктор HttpResponse. Это чуть более точное имя. На основе патча от Саймона Уиллисона. Полная обратная совместимость.

Shome Stoned
источник
0

Почему мы используем два разных наименования для (почти одного и того же) предмета?

Обратная совместимость, основанная на вашей цитате из документации.

Брайан С
источник
Хорошо, я понял практическую причину добавления этого в django. Однако суть вопроса заключается в том, почему все используют эти два слова так смешанно, и действительно ли есть разница.
Frangossauro