我在 Windows 7 上使用 nginx-1.7.0。我尝试使用 add_header 获取位于 /data/TESTFOLDER 的 json 文件。
我的位置块如下所示:
location /data/TESTFOLDER/ {
add_header 'Content-Type' 'application/json';
autoindex on;
}
当我运行我的网站时,在我的 javascript 中我有一个 jquery ajax 请求来从该文件夹获取 json 文件,firebug 给了我以下信息:
ResponseHeaders
Connection keep-alive
Content-Type text/html
Date Wed, 09 Jul 2014 14:01:29 GMT
Server nginx/1.7.0
Transfer-Encoding chunked
Request Headers
Accept application/json
Accept-Encoding gzip, deflate
Accept-Language en-us,is;q=0.7,en;q=0.3
Content-Type application/json
Host localhost
Referer http:// local host/index.html
User-Agent Mozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20100101 Firefox/30.0
X-Requested-With XMLHttpRequest
所以你会看到内容类型没有像我希望的那样改变。我的配置文件中的其他地方没有 add_header,默认值设置为 octet_stream,这是应该的。
需要注意以下几点:
- 请求“有效”,也就是说,我可以从浏览器访问本地主机/数据/TESTFOLDER/
- mime.types 包含在我的配置文件中
- mime.types 包含 application/json json;
- 我的错误日志没有关于此的错误
另外,我对 nginx 和 Web 服务器还很陌生,所以请使您的解释简单易懂。:)
答案1
add_header
不会替换现有的标题,而是添加一个新的标题,可能会导致重复,当它应该是唯一的和/或只读取其类型的第一个标题时可能会被过滤。
另一种可能性是,由于您没有使用该参数,因此响应中的 HTTP 状态代码与此指令文档中定义的列表不匹配always
。您看到的 text/html 可能是 nginx 的默认 404 页面。
无论如何,你想要使用的default_type
指示:
location /data/TESTFOLDER/ {
default_type application/json;
autoindex on;
}