nginx访问静态文件不下载

1、什么是MIME-TYPE?
MIME——Multipurpose Internet Mail Extension(多用途因特网邮件扩展)最初是为了满足电子邮件支持多字符集及附件而出现的。MIME Type 不是个人指定的,是经过 ietf 组织协商,以 RFC 的形式作为建议的标准发布在网上的,大多数的 Web 服务器和用户代理都会支持这个规范。

2、MIME与HTTP协议
除了支持电子邮件的SMTP协议以外,MIME还被其他协议或者程序广泛使用着,这其中就包括大名鼎鼎的HTTP协议。HTTP服务器在发送一份报文主体时,在HTTP报文头部插入解释自身数据类型的MIME头部信息(Content-Type)。
MIME-type和Content-Type的关系:
当web服务器收到静态的资源文件请求时,依据请求文件的后缀名在服务器的MIME配置文件中找到对应的MIME Type,再根据MIME Type设置HTTP Response的Content-Type,然后客户端如浏览器根据Content-Type的值处理文件。

3、MIME与Nginx
nginx.conf配置文件http指令块有如下默认指令

http {
    include       mime.types;
    default_type  application/octet-stream;

1)default_type
如果Web程序没设置,Nginx也没找到对应文件的扩展名的话,就使用默认的Type,这个在Nginx 里用 default_type定义: default_type application/octet-stream,这是应用程序文件类型的默认值。

2)application/octet-stream
是HTTP规范中Content-Type的一种,意思是 未知的应用程序文件 ,浏览器一般不会自动执行或询问执行。只能提交一个二进制,如果提交文件的话,只能提交一个文件,后台接收参数只能有一个,而且只能是流(或者字节数组)。对于Chrome浏览器,遇到这种类型的conten-type,就会下载该文件

3)mime.type文件内容如下

types {
    text/html                                        html htm shtml;
    text/css                                         css;
    text/xml                                         xml;
    image/gif                                        gif;
    image/jpeg                                       jpeg jpg;
    application/javascript                           js;
    application/atom+xml                             atom;
    application/rss+xml                              rss;

    text/mathml                                      mml;
    text/plain                                       txt;
    text/vnd.sun.j2me.app-descriptor                 jad;
    text/vnd.wap.wml                                 wml;
    text/x-component                                 htc;

    image/png                                        png;
    image/svg+xml                                    svg svgz;
    image/tiff                                       tif tiff;
    image/vnd.wap.wbmp                               wbmp;
    image/webp                                       webp;
    image/x-icon                                     ico;
    image/x-jng                                      jng;
    image/x-ms-bmp                                   bmp;

    application/font-woff                            woff;
    application/java-archive                         jar war ear;
    application/json                                 json;
    application/mac-binhex40                         hqx;
	...

这里形如text/html格式的字符串就是用来说明数据类型的,/前的是主类型,/之后的是该主类型下的子类型。详细的类型定义在RFC2046中。Nginx通过服务器端文件的后缀名,来查找mime.type文件,进而判断这个文件属于什么类型,再将该数据类型写入HTTP头部的Content-Type字段中,发送给客户端。

比如,当我们打开OSC的一个页面,看到一个PNG格式的图片的时候,Nginx是这样发送格式信息的:

  • 服务器上有enter_narrow.png这个文件,后缀名是png;
  • 根据mime.types,这个文件的数据类型应该是image/png;
  • 将Content-Type的值设置为image/png,然后发送给客户端。

nginx访问静态文件不下载_第1张图片

4、如何让nginx访问静态时,不下载?

回到我们最初的问题,根据上面可以得到答案。就是在nginx的mime.type中添加对应文件的类型。类如:在浏览器上输入http://ip/a.data,访问nginx上的静态文件a.data,希望浏览器不下载该文件,而是在浏览器上直接展示。那么我们需要修改mime.type文件,在其中添加一行:

text/plain                            data;

参考:

https://blog.csdn.net/veritas_c/article/details/83897001

你可能感兴趣的:(nginx)