https://blog.csdn.net/qq_27295403/article/details/90760182
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
前言: 我们在调用 wasm 文件由于 MIME-TYPE 不对,期望. wasm 文件的响应头的 Content-Type 字段值为 “application/wasm”,而不是 “application/octet-stream; charset=UTF-8”。 服务端必须对.wasm文件做正确的 MIME 类型的配置,发送Content-Type: application/wasm 头。
如何让 nginx 支持调用和识别 wasm 文件呢?
nginx 默认的配置文件nginx.conf时,细心的童鞋会看到 http 上下文中有这一行配置:
include mime.types;
有的小伙伴就有疑问了:mime.types是什么文件?在 Nginx 中又是什么作用呢? 下面我们就来看看,mime.types究竟是怎么回事(不看解析的同学可以移步第四步,直接告诉您如何调用和识别 wasm 文件)
一、MIME 与电子邮件
说起 MIME,我们首先要说说电子邮件。
早期的电子邮件只能支持 ASCII 字符集,而且没法添加附件。后来,人们意识到电子邮件要想走向世界,必须支持更多的字符集,同时,能够随着邮件发送附件也成为越来越迫切的需求。在不断的努力下,MIME——Multipurpose Internet Mail Extension(多用途因特网邮件扩展)于 1992 年诞生了。通过 MIME,我们可以将不同类型的数据(文本、图片、视频)放到一条邮件中。比如,可以写一封既含有英文,又含有中文,再加上一个 mp3 音乐文件作为附件的邮件。这种含有多种类型数据的文件被称为多部分对象集合(Multipart messages)。这就解决了我们前面说的两个问题。
可以说,没有 MIME,就没有今天多姿多彩的互联网。
二、MIME 与 HTTP 协议
除了支持电子邮件的 SMTP 协议以外,MIME 还被其他协议或者程序广泛使用着,这其中就包括大名鼎鼎的 HTTP 协议。HTTP 服务器在发送一份报文主体时,在 HTTP 报文头部插入解释自身数据类型的 MIME 头部信息(Content-Type)。客户端接收到这部分有关数据类型的信息,就能调用相应的程序处理数据。有时候,这个程序是客户端(浏览器)内置的,比如打开一个 GIF 图片。有时候你需要先安装一个插件,比如第一次观看优酷的视频前你一般需要安装 Flash 插件。
三、MIME 与 Nginx
打开 Nginx 配置文件中的mime.types,我们能看到如下信息:
text/html html htm shtml; application/javascript js; application/atom+xml atom; text/vnd.sun.j2me.app-descriptor jad; application/font-woff woff; application/java-archive jar war ear; application/mac-binhex40 hqx; application/postscript ps eps ai; application/vnd.apple.mpegurl m3u8; application/vnd.ms-excel xls;
这里形如text/html格式的字符串就是用来说明数据类型的,/前的是主类型,/之后的是该主类型下的子类型。详细的类型定义在RFC2046中。Nginx 通过服务器端文件的后缀名来判断这个文件属于什么类型,再将该数据类型写入 HTTP 头部的Content-Type字段中,发送给客户端。
比如,当我们打开 OSC 的一个页面,看到一个 PNG 格式的图片的时候,Nginx 是这样发送格式信息的:
- 服务器上有 enter_narrow.png 这个文件,后缀名是 png;
- 根据 mime.types,这个文件的数据类型应该是 image/png;
- 将
Content-Type的值设置为 image/png,然后发送给客户端。
我们在 Chrome 浏览器中可以看到这个文件返回的头部信息正如上文所写的一样:

这就是mime.types的作用
四、调用和识别 wasm 文件的关键配置
我们应该找到mime.types 文件
(1)普通 nginx 环境下:/etc/nginx/mime.types
(2)宝塔环境下/www/server/nginx/conf/nginx.conf
我们往 mime.types 文件添加一行:
pplication/wasm wasm;
然后重新启动nginx即可
