前两天对于数据库查询的页面,在nginx上做了缓存到本地处理,测试都没有问题,今天同事发现用firefox打开被缓存页面直接弹出了保存框,而不显示页面。
于是开始检查各种问题,测试下来发现访问nginx缓存的文件后http头发生了变化,
本身页面的type应该是text/html,但是这里变成了这样,发现是nginx的默认type,于是可以判断是因为nginx不能解析htmls页面导致(我的页面是htmls结尾。),但还不很了解怎么办,google发现原来是nginx的mime.types里配置,mime.types文件里罗列了nginx支持的所有文件格式,果然少了一个htmls,加上就大功告成了。
用了nginx这么久,这么简单的问题都纠结了一个多小时,平时很少去主要conf目录下的其他默认问题及,真是汗颜,做技术真的是什么细节都不能忽略,不求甚解只能害人害己。
以下收录mime.type介绍,以供温习。
MIME-type和Content-Type的关系:
当web服务器收到静态的资源文件请求时,依据请求文件的后缀名在服务器的MIME配置文件中找到对应的MIME Type,再根据MIME Type设置HTTP Response的Content-Type,然后浏览器根据Content-Type的值处理文件。
什么是MIME-TYPE:
为什么这么说呢?首先,我们要了解浏览器是如何处理内容的。在浏览器中显示的内容有 HTML、有 XML、有 GIF、还有 Flash ...
那么,浏览器是如何区分它们,绝对什么内容用什么形式来显示呢?答案是 MIME Type,也就是该资源的媒体类型。
媒体类型通常是通过 HTTP 协议,由 Web 服务器告知浏览器的,更准确地说,是通过 Content-Type 来表示的,例如:
Content-Type: text/HTML
表示内容是 text/HTML 类型,也就是超文本文件。为什么是“text/HTML”而不是“HTML/text”或者别的什么?MIME Type 不是个人指定的,是经过 ietf 组织协商,以 RFC 的形式作为建议的标准发布在网上的,大多数的 Web 服务器和用户代理都会支持这个规范 (顺便说一句,Email 附件的类型也是通过 MIME Type 指定的)。
通常只有一些在互联网上获得广泛应用的格式才会获得一个 MIME Type,如果是某个客户端自己定义的格式,一般只能以 application/x- 开头。
XHTML 正是一个获得广泛应用的格式,因此,在 RFC 3236 中,说明了 XHTML 格式文件的 MIME Type 应该是 application/xHTML+XML。
当然,处理本地的文件,在没有人告诉浏览器某个文件的 MIME Type 的情况下,浏览器也会做一些默认的处理,这可能和你在操作系统中给文件配置的 MIME Type 有关。比如在 Windows 下,打开注册表的“HKEY_LOCAL_MACHINESOFTWAREClassesMIMEDatabaseContent Type”主键,你可以看到所有 MIME Type 的配置信息。
NGINX中设置默认的MIME-type(在nginx.conf中)
default_type
syntax: default_type MIME-type
default: default_type text/plain
context: http, server, location
Assigns the default MIME-type to be used for files where the standard MIME map doesn't specify anything.
Example:
location = /proxy.pac {
default_type application/x-ns-proxy-autoconfig;
}
location = /wpad.dat {
rewrite . /proxy.pac;
default_type application/x-ns-proxy-autoconfig;
}
有话要说