是一个MIME头声明良好的做法?

我最近一直在研究一个小项目来提供静态文件。 我希望能够提供不同类型的文件,如:

html, jpg, png, pdf, doc...

所有文件似乎在不分配MIME类型的情况下在不同的浏览器中正确显示。

例如,如果我提供图像并声明一个MIME类型,我会在我的node.js代码中写入:

response.writeHead(200, {'Content-Type': 'image/jpg'});
response.end(data);

忽略MIME类型将在不同的浏览器中呈现完全相同的结果:

response.writeHead(200);
response.end(data);

这是我的理解,如果没有在头中声明MIME类型,浏览器将尽最大努力找出它。

根据HTTP规范,'Content-Type'头部不是必需的。

与所有多部分MIME类型一样,每个部分都有一个可选的“Content-Type”,默认为text / plain。

我应该为每个响应声明MIME类型吗? 为什么?


您正在引用MIME RFC。 但在这种情况下, Content-Type受到RFC 7231的权力,该部分读取(强调我的):第3.1.1.5节:

生成包含有效载荷主体的消息的发送者应该在该消息中生成Content-Type头字段,除非发送者未知所包含表示的预期媒体类型。

实际上,如果你忽略了这个头文件,你将会猜测文件扩展名和魔术字节。 Content-Type标题将优先于这些标题,并保存客户端的一些工作。

RFC的相关部分如下解决这个问题:

这样做的客户有可能得出错误的结论,这可能会暴露额外的安全风险(例如“特权升级”)。 此外,通过检查数据格式来确定发送者的意图是不可能的:许多数据格式匹配仅在处理语义上不同的多种媒体类型。


您必须设置MIME类型。 客户端确定正在处理的数据的类型非常有用。 与节点无关。 这是http规范。

链接地址: http://www.djcxy.com/p/46855.html

上一篇: Is a MIME header declaration good practice?

下一篇: Error: MIME type text/csv