ContentType ve MimeType'ın farkı nedir


103

Bildiğim kadarıyla, mutlak eşitler. Ancak, bazı django belgelerine göz atarken şu kod parçasını buldum:

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

Bu ikisinin birbiriyle anlaşması beni şaşırttı. Resmi belgeler konuyu pratik bir şekilde çözmeyi başardı:

content_type, mimetype için bir takma addır. Geçmişte, bu parametre yalnızca mimetype olarak adlandırılırdı, ancak bu aslında HTTP Content-Type başlığında bulunan değer olduğundan, karakter kümesi kodlamasını da içerebilir, bu da onu bir MIME türü belirtiminden daha fazlasını yapar. Mime türü belirtilirse (Yok değil), bu değer kullanılır. Aksi takdirde, içerik_türü kullanılır. Hiçbiri belirtilmezse, DEFAULT_CONTENT_TYPE ayarı kullanılır.

Ancak, bunu yeterince açıklayıcı bulmuyorum. Neden (neredeyse aynı) bir şey için 2 farklı isim kullanıyoruz? "İçerik Türü", tarayıcı isteklerinde kullanılan ve dışında çok az kullanılan bir ad mıdır?

Her biri arasındaki temel fark nedir ve ne zaman bir şeyi aramak mimetypeyerine onu aramak doğru olur content-type? Ben acınası ve gramer nazi miyim?

Yanıtlar:


54

Neden (neredeyse aynı) bir şey için 2 farklı isim kullanıyoruz? "İçerik Türü", tarayıcı isteklerinde kullanılan ve dışında çok az kullanılan bir ad mıdır?

Her biri arasındaki temel fark nedir ve içerik türü yerine bir şeyi mime türü çağırmak ne zaman doğrudur? Ben acınası ve gramer nazi miyim?

Nedeni sadece geriye dönük uyumluluk değil ve korkarım genellikle mükemmel Django dokümantasyonu bu konuda biraz dalgalı. MIME (en azından Wikipedia girişini gerçekten okumaya değer), kökeni internet postasını ve özellikle SMTP'yi genişletmektir. Oradan, MIME ve MIME'den esinlenen uzantı tasarımı, birçok başka protokole (burada HTTP gibi) yolunu buldu ve mevcut bir protokolde yeni meta veri veya veri türlerinin iletilmesi gerektiğinde hala kullanılıyor. Çok sayıda amaç için kullanılan MIME'yi tartışan düzinelerce RFC vardır.

Özellikle, Content-Type:birkaç MIME başlığından biridir. "Mimetype" gerçekten eski görünebilir, ancak MIME'nin kendisine yapılan bir referans değildir. İsterseniz bu kısma geriye dönük uyumluluk deyin.

[BTW, bu tamamen bir terminoloji problemidir ve gramer ile hiçbir ilgisi yoktur. Her kullanım sorusunu "dilbilgisi" altında doldurmak benim için çok küçük bir şey. Grrrr.]


49

ContentType'ı her zaman mimeType'ın bir üst kümesi olarak görmüşümdür. Tek fark, isteğe bağlı karakter seti kodlamasıdır. ContentType isteğe bağlı bir karakter kümesi kodlaması içermiyorsa, bir mimeType ile aynıdır. Aksi takdirde, mimeType, karakter kümesi kodlama sırasından önceki verilerdir.

ÖRNEĞİN text/html; charset=UTF-8

text/htmlmimeType
;, ek parametreler göstergesidir
charset=UTF-8, karakter seti kodlama parametresidir

ÖRNEĞİN application/msword

application/mswordmimeType dir . Karakterleri doğrudan içermeyen,
iyi biçimlendirilmiş bir kodlamayı açıkladığından, bir karakter seti kodlamasına sahip olamaz octet-stream.


1
Bu doğru cevap. Mime_type (içerik_türü değil) yanıtı ayarlamak karakter kümesini geçersiz kılmaz ve UTF-8 olarak kalır.
Mikko Ohtamaa

Bazen basitçe "ortam türü" olarak adlandırılan MIME türü, sizin söylediğiniz gibi ortam türüdür. Bazı özelliklerde, Content-Typebaşlıktaki özelliklerin kullanımını içeren "ayrıştırılabilir MIME türü" terimini göreceğiz . Sözdizimi Content-Typeburada bulunabilir: tools.ietf.org/html/rfc2045#section-5.1
Josh Habdas

Yine de, benim görüşüme göre, mime-type, kendisini postayla sınırlayan çok dar bir terim iken, content-type, "içeriğin türü" için düz İngilizce'dir. Yani, benim görüşüme göre text/html, insanlar buna MIME deme eğiliminde olsalar bile, bir içerik türü de. Ayrıca, media-typemedya 100 farklı şey olduğu için, yeni isim daha da belirsizdir. BBC bir medyadır! DVD bir medyadır! Ve bir veri akışının "medya" değil, "ortam" olduğu tartışılabilir.
user2173353

4

Ayrıntıları öğrenmek isterseniz 3526 numaralı bilete bakın .

Alıntı:

HttpResponse yapıcısına mimetype için takma ad olarak content_type eklendi. Biraz daha doğru bir isim. Simon Willison'dan bir yamaya dayanıyor. Tamamen geriye dönük uyumlu.


0

Neden (neredeyse aynı) bir şey için 2 farklı isim kullanıyoruz?

Belgelerden aldığınız alıntıya göre geriye dönük uyumluluk.


Sorun değil, bunu django'ya eklemenin pratik nedenini anladım. Ancak sorunun özü, neden herkesin bu iki kelimeyi bu kadar karışık kullandığı ve sonuçta gerçekten bir fark olup olmadığıdır.
Frangossauro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.