У чому різниця 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.

Однак я не вважаю це достатньо з'ясованим. Чому ми використовуємо 2 різні імена для (майже однакової) речі? Чи "Тип вмісту" - це лише ім'я, яке використовується в запитах браузера, і поза ним дуже мало?

У чому головна відмінність кожного з них, і коли правильно називати щось mimetypeна противагу content-type? Чи я буду питком і граматикою нацистами?

Відповіді:


54

Чому ми використовуємо 2 різні імена для (майже однакової) речі? Чи "Тип вмісту" - це лише ім'я, яке використовується в запитах браузера, і поза ним дуже мало?

У чому головна відмінність кожного з них, і коли правильно називати щось міметиком на відміну від контент-типу? Чи я буду питком і граматикою нацистами?

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

Зокрема, Content-Type:це один із декількох заголовків MIME. "Mimetype" справді звучить застарілим, але посилання на сам MIME не є. Назвіть цю частину зворотною сумісністю, якщо хочете.

[BTW, це суто термінологічна проблема, яка не має нічого спільного з граматикою. Подача кожного запитання щодо використання під "граматику" - це моє домашнє тварина. Grrrr.]


49

Я завжди вважав, що contentType є сукупністю mimeType. Єдина відмінність - необов'язкове кодування набору символів. Якщо contentType не включає необов'язкове кодування набору символів, то він ідентичний mimeType. В іншому випадку mimeType - це дані до послідовності кодування набору символів.

EG text/html; charset=UTF-8

text/htmlє mimeType
;- додатковий параметр, індикатор
charset=UTF-8- це параметр кодування набору символів

EG 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 - це медіа! І можна стверджувати, що потік даних - це не «медіа», а «носій».
користувач2173353

4

Якщо ви хочете дізнатися деталі, дивіться квиток 3526 .

Цитата:

Доданий content_type як псевдонім для mimetype конструктору HttpResponse. Це трохи точніша назва. На основі латки від Саймона Віллісона. Повністю назад сумісні.


0

Чому ми використовуємо 2 різні імена для (майже однакової) речі?

Зворотна сумісність, виходячи з вашої цитати з документації.


Це нормально, я розумію, що це стосується джанго. Однак суть питання полягає в тому, що кожен використовує два слова, так змішані, і якщо все-таки є різниця.
Франгоссауро
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.