Nginx(十八)mime.types的作用

一   MIME简介  了解

++++++++++++'MIME简介'++++++++++++

1)全称'Multipurpose Internet Mail Extension(多用途因特网邮件扩展)'最初是为了满足'电子邮件'支持'多字符集'及'附件'而出现的

2)通过MIME,我们可以写一封'既含有英文'、'又含有中文',再加上一个'文件作为附件'的邮件,这种含有'多种类型数据的文件'被称为多部分对象集合(Multipart messages)

3)MIME Type '不是个人指定'的,是经过 'ietf 组织协商',以' RFC 的形式'作为建议的'标准'发布在网上的

4)大多数的' Web 服务器'和'用户代理'都会'支持'这个规范

备注: 'Email 附件的类型'也是通过 'MIME Type 指定'的

+++++++++++'媒体类型'+++++++++++

媒体类型通常是'通过 HTTP 协议',由 'Web 服务器'告知'浏览器'的

'如何告知': 是通过 'Content-Type'这个响应头来表示的

例如:Content-Type: text/htmlL,表示'内容是 text/html 类型',也就是'超文本文件'

二    MIME-Type和Content-Type的关系

++++++++++'MIME-type和Content-Type的关系'++++++++++

1)HTTP服务器在'响应'一份'报文主体'时,在HTTP'报文头部'插入'解释自身数据类型'的MIME头部信息-->'Content-Type'

2)当web'服务器收到'静态的资源文件请求时,依据'请求文件的后缀名'在服务器的'MIME配置文件中找'到对应的'MIME Type',再根据MIME Type'设置HTTP Response的Content-Type',然后'客户端如浏览器'根据Content-Type的值'处理文件'

Content-Type详解

①  服务端如何处理静态资源文件

媒体类型通常是通过 'HTTP' 协议,由 Web 服务器过'Content-Type值'来告知'浏览器'的

例如:'响应头' -->Content-Type: text/html

 ②  客户端如何处理Content-Type值请求

浏览器是'如何区分'它们,进而决定'什么内容'用'什么形式'来显示呢?

三   nginx中关于媒体类型

nginx访问静态文件不下载

①  nginx中的 mime.types文件

'include'表示'纳入mime.types文件'的配置

举例: 形如text'/html格式'的字符串就是用来说明'数据类型'的

1)'/'前的是'主'类型

2)'/之后'的是该主类型下的'子类型'

备注:详细的类型定义在'RFC2046'中

nginx压缩ttf文件踩坑 mine.types的作用 

gzip_types

解决nginx下加载eot|otf|ttf|woff|svg等404 错误问题

②  default_type

 作用:在'mime.type'文件中找不到'文件'映射的'type'时'采用'默认的'default_type'

 如果web程序'没设置,'Nginx也'没找到'对应文件的'扩展名'的'type'话,就使用'默认的Type'

③  types

四    案例讲解

比如:当我们打开'chrome浏览器'看一个'PNG格式的图片'的时候,Nginx是这样'发送格式信息'的:

1)服务器上'有wzj.png'这个文件,后缀名是png;

2)根据'include mime.types'查找到这个文件的'数据类型'应该是'image/png';

3)将'Content-Type'的值设置为'image/png',然后发送给'客户端(浏览器)'

1)如果处理'本地的'文件,在'没有人告诉'浏览器某个文件的 MIME Type 的情况下,浏览器也会做一些'默认的处理'

2)'默认的处理'和你'在操作系统中'给文件配置的 'MIME Type 有关'

Windows 下: 打开注册表的"HKEY_LOCAL_MACHINESOFTWAREClassesMIMEDatabaseContent Type"主键,可以看到'所有 MIME Type' 的配置信息

Linux下:通过一个'文本文件静态'关联数据库,负责将'application'(应用程序描述文件)与'MIME type'(Shared MIME Database)对应起来

Centos7该'数据库'为:/usr/share/applications/mimeinfo.cache

Linux MIME Type

+++++++++ 'Content-Type更通用的格式' +++++++++

Content-Type: [type]/[subtype]; parameter

用于定义网络文件的'类型'和网页的'编码',决定浏览器将以'什么形式'、'什么编码读取'这个文件

Content-Type 标头是'服务器'告诉客户端'实际返回的内容'的'内容类型'

++++++++++'语法格式'++++++++++

Content-Type: text/html; charset=utf-8

①   查看文件的MIME Type

格式: mimetype filename 

备注: mimetype命令'需要安装'

yum install perl-File-MimeInfo.noarch -y

②根据文件的MIME type找到打开方式

gio mime mime_type

五   思考

(1)浏览器对于一个文件类型如何判断渲染显示还是下载

浏览器的'原则'是能'打开'就打开-->'在自己的媒体类型中',不能打开'就下载'

1)每个'浏览器内置支持'的 Content-Type 类型表各不相同,这导致了'某些类型字符串'在'某些浏览器下'不被识别

2)另外如果'出现错误'的 Content-Type 类型,各个浏览器又会'以不同的方式'处理

思考: 如果客户端请求-->'request'的'Content-Type'和服务器响应-->'response'的'Content-Type'不一致呢?

(2)对于特定的文件类型,强制让其显示内容,而不是不能识别导致下载

常见: 'application/octet-stream'

   是'HTTP规范中'Content-Type的一种.意思是:'未知'的'应用程序'文件,浏览器一般'不会自动执行'或'询问执行',表示这是个'二进制流',需要'下载到本地'后由'用户端环境决定'如何使用

   备注: '如果'提交文件的话,只能'提交一个文件',后台'接收参数'只能有'一个',而且只能是流(或者字节数组)

nginx配置让任何文件在浏览器中显示文本text/plain或者xml,而不是下载

已知: 对于'text/plain'格式的文件,可以在'任何浏览器'中'直接打开'而不会下载

需求: 在nginx中配置'perl'这种特殊结尾的文件为'直接打开',而不是下载

+++++++++'从三个粒度来解析'+++++++++
​
主要作为'对比'实验

①  默认是下载

说明: nginx的无法识别'perl结尾的文件',能识别'pl和pm'结尾的文件,'并且'如果安装了对应的模块,并在nginx种做了相应的配置,则会'解析该脚本'后返回内容给客户端

②  方式1全局

vim /etc/nginx/mime.types

说明: 最好不要'一种后缀文件'对应'多种媒体类型'

注意: 修改之后一定要'restart','reload'不生效

备注: 可以'写在同一行',以'空格隔开';也可以'另起一行'

细节: 这个方法修改后'影响所有nginx网站'的配置

③  方式2:只针对某种文件类型(推荐

备注: 甚至可以'自定义文件'类型,但是浏览器可能'不能'按照该种格式解析-->因为是'伪造'的
单独打开'某个网站'的配置文件,在server中修改

案例: 所有目录下'以perl结尾的文件'显示为'text/plain'格式

location ~ .*\.perl$ {
    add_header Content-Type text/plain;
}

④    方式3:只针对某个站点某个目录下的文件 

location /perl/ {
    'location嵌套'
    location ~* .*\.perl$ {
        add_header Content-Type text/plain;
    }

⑤    效果展示 

(6)强制设置所有文件都是下载

header中Content-Disposition的作用与使用方法

location / {
    root   html;
    add_header Content-Disposition "attachment; filename=$1";  
    index  index.html
}

(7)nginx支持播放mkv视频

#nginx.conf
#在server > location块内加入
types{
    video/webm  mkv;
}

mime.types使用案例

案例补充1

常见的Content-Type

文件在线预览和下载

X-Accel-Redirect

局部覆盖默认的content-type响应头并自定义content-type​​​​​​​

  • 10
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值