既然有文件后缀名,为何还需要MIME类型?
链接:https://www.zhihu.com/question/60495696/answer/204530120
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
下面是正经的科普时间。
文件扩展名是什么?
是操作系统用来标注文件格式的一种机制,用一个点号(.)和主文件名分隔开。由于历史原因,多数扩展名是三个字母。
注意,这里说的是标注,而非定义,既然是标注,说明不是强制的。
比如你用photoshop可以打开一个psd图像文件。把这个文件扩展名改为txt,再拖到photoshop窗口里,还是一样能打开,说明内容完全没有变化,变化的只是双击时的默认打开方式。
而MIME又是什么?
它全名叫多用途互联网邮件扩展(Multipurpose Internet Mail Extensions),最初是为了将纯文本格式的电子邮件扩展到可以支持多种信息格式而定制的。后来被应用到多种协议里,包括我们常用的HTTP协议。
MIME的常见形式是一个主类型加一个子类型,用斜线分隔。比如text/html、application/javascript、image/png等。
在访问网页时,MIME type帮助浏览器识别一个HTTP请求返回的是什么内容的数据,应该如何打开、如何显示。
看到了吧,两者有共同的用途:用来标注信息的格式。
但应用场景完全不同:一个是操作系统中标注文件的,一个是邮件和HTTP协议中用来标注网络数据的。
但为什么两者会发生混淆,以至于有人把错误的结论写进了百度百科呢?
这就是历史原因了。
当Web服务刚诞生时,所有的网页其实就是静态页面的展示,没有互动、没有动态内容,只能靠超链接跳来跳去。而这些页面、样式、图片保存在哪呢?最简单的方式就是把url地址直接映射到本地文件。
比如http://www.xxx.com/images/logo.jpg,实际就对应着服务器上的一个/xxxxxx/images/logo.jpg文件。在有人访问它时,返回的MIME type是image/jpeg。
所以会造成一种误解:一个网址就是一个文件,它们的扩展名和MIME type是一一对应的。
实际上呢?当然不是这样,那只是在最简情况下的一种特殊做法。实际上,随着Web技术的发展,通过服务器端动态脚本和各种开发语言,网址和本地文件的关系已经不再紧密。
一张图片的网址所返回的MIME type是固定的(比如image/jpeg),但它的本体对应的可能是服务器上的一个文件,也可能是缓存中的一段数据,还可能是数据库中的一个字段,甚至是程序代码动态生成的图像。
尤其是RESTful等风格的url流行开后,网址中的文件扩展名部分也不见了。主流的url都变成了http://www.xxx.com/users/zhangsan/followers/page/20/这种形式。早已看不到任何文件名的踪影,与本地文件彻底脱钩,没有任何关系了。
现在你知道文件扩展名和MIME type是作用相似,但应用场合完全不同的两种东西了吧。仅仅因为一些历史原因,让两者在某些情况下的外观有些重合,才导致了这些误解。
而这种错误的理解被人传来传去,最后还有一个根本连话都说不通顺的版本被写进了百度百科。
所·以·说:
程序猿们,能不用百度就不要用百度,就算真的用了,也别信百度百科和百度知道里那些为了凑积分不知从哪Ctrl-C Ctrl-V来的东西!
MIME类型是什么?包含哪些类型?
既然有文件后缀名,为何还需要MIME类型?的更多相关文章
- UTI iPhone支持依文件后缀名打开应用
本文转载至 http://blog.csdn.net/zaitianaoxiang/article/details/6658492 iphoneapplicationprocessingfileurl ...
- -05 08:57 ARCGIS地统计学计算文件后缀名为.shp文件制作
2011-07-05 08:57 ARCGIS地统计学计算文件后缀名为.shp文件制作 ARCAMP软件要进行地统计计算的文件后格式后缀名必须为.shp的文件,网上介绍的方法复杂难懂,那么制作.shp ...
- Linux下的文件及文件后缀名
Linux下的文件及文件后缀名 2013-03-14 15:34 6969人阅读 评论(0) 收藏 举报 ++++++++++++++++++++++++++++++++++++++正文+++++++ ...
- 关于Windows下的文件后缀名问题
一.背景说明 有很多的小伙伴对windows下的文件后缀名不能很好地理解作用和区别,更不用说高深的使用了,在这里给大家说一下这些文件后缀名到底有什么区别,有什么作用呢? 二.说明 简单的说来,wind ...
- js 上传文件后缀名的判断 var flag=false;应用
js 上传文件后缀名的判断 var flag=false;应用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...
- [Java] 03 String获取文件后缀名,判断文件是否合法
package test.string; import java.util.Arrays; import java.util.List; public class GetFileType { priv ...
- php 获取文件后缀名
$file_ext = strtolower(substr(strrchr($upload_file, '.'), 1)); strrchr:查找指定字符在字符串中的最后一次出现 string str ...
- C#文件后缀名详解
C#文件后缀名详解 .sln:解决方案文件,为解决方案资源管理器提供显示管理文件的图形接口所需的信息. .csproj:项目文件,创建应用程序所需的引用.数据连接.文件夹和文件的信息. .aspx:W ...
- PHP获取文件后缀名的三种方法
如下: <? PHP获取文件后缀名的几种方法1: function get_file_type($filename){ $type = substr($filename, strrpos($fi ...
随机推荐
- 配置连接的IP、端口、以及相应的数据库
解压后里面有:lib 源文件 .examples 例子.test测试 将lib目录拷贝到你的项目中,就可以开始你的predis操作了. //使用autoload加载相关库,这边重点就是为了requir ...
- Linux汇编教程04:寻址方式
这一节,我们主要来讨论寻址方式,这一点十分重要. 我们上一节有稍微提了一下,内存地址引用的通用格式: 地址或偏移(%基址寄存器, %索引寄存器, 比例因子 ) 结果地址 = 地址或偏移 + %基址寄存 ...
- python基础===输入必须为数字的检验的另一种方法
print("[+]welcome to python3") while True: num = input("please input a num:") if ...
- Asp.Net Forms获取UEeditor内容
UEeditor是比较常用的富文本编辑器. 获取编辑器的内容,需要使用js获取,官方提供的方法是:UE.getEditor('editor').getContent(); 官方提供的.net例子中是使 ...
- [New learn]AutoLayout调查基于code
代码https://github.com/xufeng79x/TestAutolayout-code2 0.插在前面 必须关闭view的自动缩放掩码,自动缩放掩码是autolayout出现之前系统管理 ...
- 理解rest架构
越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记1——创建窗口&GDI
第1章 创建窗口 步骤: 窗口类的设计 窗口类的注册 窗口的正式创建 窗口的显示与更新 消息循环体系 窗口过程函数处理消息 1. 设计:使用WNDCLASSEX结构体,这里注意的是C++中的结构体中的 ...
- Java学习笔记(三)——静态导入,package-info,Fall-through
[前面的话] 算是真正的放松了好几天时间,没有看任何书,没有任何任务,今天是过完年后的第一天上班时间,我又开始了我的学习之路,感觉还没有老,怎么心态越来越平静了,进入工作状态,就好好努力工作,新的一年 ...
- AC日记——「SCOI2015」情报传递 LiBreOJ 2011
#2011. 「SCOI2015」情报传递 思路: 可持久化树状数组模板: 代码: #include <bits/stdc++.h> using namespace std; #defin ...
- [水煮 ASP.NET Web API2 方法论](12-3)OData 查询
问题 Web API 怎么支持通用的 OData 系统查询项,例如 $select 或 $filter. 解决方案 为了在 Web API 中启用查询项,我们需要在 Action 上使用 Enable ...