问题:ContentType和MimeType有什么区别
据我所知,它们是绝对平等的。但是,浏览一些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种不同的命名?“ Content-Type”只是浏览器请求中使用的名称,而在其外部很少使用吗?
两者之间的主要区别是什么,什么时候可以打电话给对方mimetype
而不是content-type
?我是卑鄙的语法纳粹吗?
回答 0
为什么我们为(几乎相同的)事物使用2种不同的命名?“ Content-Type”只是浏览器请求中使用的名称,而在其外部很少使用吗?
两者之间的主要区别是什么,何时称呼某种mimetype而不是content-type才是正确的?我是可怜的纳粹语法吗?
原因不仅是向后兼容,而且恐怕通常出色的Django文档对此有些不易理解。MIME(至少值得阅读Wikipedia条目确实很值得)起源于扩展Internet邮件,尤其是SMTP。从那里开始,MIME和受MIME启发的扩展设计已经在许多其他协议(例如此处的HTTP)中找到了应用,当需要在现有协议中传输新型元数据或数据时,它仍在使用。有数十个RFC讨论了用于多种目的的MIME。
具体来说,Content-Type:
是几个MIME标头之一。“ Mimetype”确实确实过时了,但是对MIME本身的引用却不是。如果可以的话,将该部分称为后向兼容性。
[BTW,这纯粹是一个术语问题,与语法无关。提出“语法”下的每个用法问题都是我的宠儿。咕rr
回答 1
我一直将contentType视为mimeType的超集。唯一的区别是可选字符集编码。如果contentType不包含可选字符集编码,则它与mimeType相同。否则,mimeType是字符集编码序列之前的数据。
例如 text/html; charset=UTF-8
text/html
是mimeType ;
是附加参数指示符charset=UTF-8
是字符集编码参数
例如 application/msword
application/msword
是mimeType,
它不能具有字符集编码,因为它描述的格式octet-stream
不直接包含字符。
回答 2
如果您想了解详细信息,请参阅票证3526。
引用:
向HttpResponse构造函数添加了content_type作为mimetype的别名。这是一个稍微准确的名称。基于Simon Willison的补丁。完全向后兼容。
回答 3
为什么我们为(几乎相同的)事物使用2种不同的命名?
向后兼容性,基于您在文档中的报价。