nginx json文件服务器,nginx服务器返回json文件时content-type不正确的坑

最近在用vue写个demo时,使用vue-resource 的$htpp.get()请求一个json文件时,webstrom本地环境可以获取到,http响应报文包头中content-type为application/json,通过$http.get().then(res => {})回调函数中的res.body.result即可获取json文件的内容,但是在上传我的云服务器后请求返回的是content-type:application/octet-stream:

01abdeeb575b5914de67354dacf5f712.png

即返回的是一个二进制流的文件,在下载文件时会用到这个类型,但是res.body.result就获取不到内容了。

踩坑

前端在百度搜索相关问题几乎没有,在前端群里没人知道…算是遇到了个奇葩的问题…

首先想到的是在发送get请求时设置http请求报文包头中的content-type=application/json:

1

2

3Vue.http.options.headers = {

'Content-Type':'application/json'

};

但是这只是设置报文发送的格式,并没有设置客户端希望服务器返回的内容格式,于是继续设置Accept:

1

2

3

4Vue.http.options.headers = {

'Content-Type':'application/json',

'Accept':'application/json'

};

测试还是不行,响应报文中content-type依旧是application/octet-stream,很苦恼…

服务器

在鼓捣半天确认前端没有错误后,我觉得问题应该出在服务器上。我的服务器centos是基于nginx,于是开始搜索关于nginx不返回json格式内容的问题。得到要在server中配置location拦截:

1

2

3

4location ~ ^/get_json {

default_type application/json;

return 200 '{"status":"success","result":"nginx json"}';

}

这个配置要在nginx.conf中配置(我的配置文件还有个nginx.conf.default,两个都要配置),如果不知道nginx.conf文件在哪,可以使用搜索命令:

1find / | grep nginx.conf

location 具体在文件哪里配置,参考nginx配置文件nginx.conf详细解释

配置文件修改之后要重新运行配置文件,不过要进入/nginx/sbin中执行命令:

1./nginx -s reload

测试一下还是不行…

最后在stackoverflow上看到了一个问题:Enabling content-type application/json for all the json files in nginx,即nginx中没有设置json文件的content-type为application/json!

于是,找到和nginx.conf同在一个文件夹conf下的mime.types文件和mime.types.default,修改。

120a1585a095b812e02e05fb4f2d0f97.png

1

2vi mime.types

vi mime.types.default

加上:application/json json;

效果图:

6b8697c63523eed10b5690f40245b679.png

然后重启配置文件,进入/nginx/sbin中执行命令:

1./nginx -s reload

问题解决!

总结

为什么nginx的默认配置里面没有application/json呢…不科学…

如果你遇到同样的问题,我的建议是先查看mime.types里面有没有application/json的配置,没有就加上,然后测试。无效的话就在nginx.conf中加入location的配置,在js中为get方法配置content-type和accept,就可以了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值