Apa perbedaan ContentType dan MimeType

103

Sejauh yang saya tahu, mereka benar-benar setara. Namun, menjelajahi beberapa dokumen django, saya menemukan potongan kode ini:

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

yang mengejutkan saya karena keduanya bisa akur. Dokumen resmi dapat menyelesaikan masalah ini dengan cara yang praktis:

content_type adalah alias untuk mimetype. Secara historis, parameter ini hanya disebut mimetype, tetapi karena ini sebenarnya adalah nilai yang disertakan dalam header Jenis Konten HTTP, parameter ini juga dapat menyertakan pengkodean kumpulan karakter, yang membuatnya lebih dari sekadar spesifikasi jenis MIME. Jika mimetype ditentukan (bukan None), nilai itu akan digunakan. Jika tidak, content_type digunakan. Jika tidak ada yang diberikan, pengaturan DEFAULT_CONTENT_TYPE digunakan.

Namun, saya tidak merasa cukup menjelaskan. Mengapa kami menggunakan 2 penamaan yang berbeda untuk hal yang (hampir sama)? Apakah "Jenis Konten" hanya nama yang digunakan dalam permintaan browser, dan dengan sedikit penggunaan di luarnya?

Apa perbedaan utama antara masing-masing, dan kapan hak untuk memanggil sesuatu mimetypesebagai lawan content-type? Apakah saya bersikap pitty dan tata bahasa nazi?

Frangossauro
sumber

Jawaban:

54

Mengapa kami menggunakan 2 penamaan yang berbeda untuk hal yang (hampir sama)? Apakah "Jenis Konten" hanya nama yang digunakan dalam permintaan browser, dan dengan sedikit penggunaan di luarnya?

Apa perbedaan utama antara masing-masing, dan kapan hak untuk menyebut sesuatu mimetype sebagai kebalikan dari jenis konten? Apakah saya bersikap pitty dan tata bahasa nazi?

Alasannya bukan hanya kesesuaian ke belakang, dan saya khawatir dokumentasi Django yang biasanya sangat baik agak bergelombang tentangnya. MIME (sangat berharga untuk membaca setidaknya entri Wikipedia) berawal dari perluasan surat internet, dan khususnya SMTP. Dari sana, desain ekstensi yang terinspirasi MIME dan MIME telah menemukan jalannya ke banyak protokol lain (seperti HTTP di sini), dan masih digunakan ketika jenis metadata atau data baru perlu dikirim dalam protokol yang sudah ada. Ada lusinan RFC yang membahas MIME yang digunakan untuk berbagai tujuan.

Secara khusus, Content-Type:adalah salah satu dari beberapa header MIME. "Mimetype" memang terdengar usang, tetapi referensi ke MIME itu sendiri tidak. Sebut bagian itu kompatibilitas mundur, jika Anda mau.

[BTW, ini murni masalah terminologi yang tidak ada hubungannya sama sekali dengan tata bahasa. Mengajukan setiap pertanyaan penggunaan di bawah "tata bahasa" adalah hal yang membuat saya kesal. Grrrr.]

chryss
sumber
49

Saya selalu melihat contentType sebagai superset dari mimeType. Satu-satunya perbedaan adalah encoding kumpulan karakter opsional. Jika contentType tidak menyertakan pengkodean kumpulan karakter opsional maka itu identik dengan mimeType. Jika tidak, mimeType adalah data sebelum rangkaian penyandian karakter.

MISALNYA text/html; charset=UTF-8

text/htmladalah mimeType
;adalah indikator parameter tambahan
charset=UTF-8adalah parameter encoding set karakter

MISALNYA application/msword

application/mswordadalah mimeType
Ini tidak dapat memiliki kumpulan karakter yang mengkodekan karena ini menggambarkan bentuk yang baik yang octet-streamtidak terdiri dari karakter secara langsung.

Reggie Carey
sumber
1
Ini jawaban yang benar. Menyetel respons mime_type (bukan content_type) tidak menimpa charset dan tetap sebagai UTF-8.
Mikko Ohtamaa
Terkadang hanya disebut "jenis media", jenis MIME adalah seperti yang Anda ucapkan sebagai jenis media. Dalam spesifikasi tertentu kita akan melihat istilah "jenis MIME yang dapat diuraikan", yang mencakup penggunaan properti di Content-Typetajuk. Sintaks Content-Typedapat ditemukan di sini: tools.ietf.org/html/rfc2045#section-5.1
Josh Habdas
Namun, dalam pandangan saya, mime-type adalah istilah yang sangat sempit yang membatasi dirinya sendiri untuk mail, sedangkan content-type adalah bahasa Inggris sederhana untuk "jenis konten". Jadi, dalam pandangan saya text/htmladalah tipe konten juga, meskipun orang cenderung menyebutnya MIME. Juga, nama yang lebih baru,, media-typebahkan lebih kabur, karena media adalah 100 hal yang berbeda. BBC adalah media! DVD adalah media! Dan orang akan berpendapat bahwa aliran data bukanlah "media", tetapi "media".
pengguna2173353
4

Jika Anda ingin mengetahui detailnya lihat tiket 3526 .

Mengutip:

Menambahkan content_type sebagai alias untuk mimetype ke konstruktor HttpResponse. Itu nama yang sedikit lebih akurat. Berdasarkan patch dari Simon Willison. Kompatibel sepenuhnya ke belakang.

Shome Stoned
sumber
0

Mengapa kami menggunakan 2 penamaan yang berbeda untuk hal yang (hampir sama)?

Kompatibilitas mundur, berdasarkan kutipan Anda dari dokumentasi.

Brian S
sumber
Tidak apa-apa, saya sudah memahami alasan praktis untuk menambahkannya pada django. Namun, inti dari pertanyaannya adalah mengapa setiap orang menggunakan kedua kata tersebut begitu bercampur, dan jika memang ada perbedaan.
Frangossauro