Nginx配置跨域(CROS)解决Swagger报错:TypeError Failed to fetch

问题及解决过程

Swagger版本:

<!--导入swagger依赖-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>

我的SpringBoot部署在云服务器上,访问Swagger-ui接口文档成功,但发送请求失败。

发现Swagger页面上报错:TypeError: Failed to fetch

注意到发送的请求地址:
在这里插入图片描述

原来是没有配置域名的原因。配置如下:
在这里插入图片描述
(其中,协议类型我多添加了https,但对结果无大碍)

重启项目后,发现还是无法解决问题。

F12查看了Network,发现请求返回200状态码。但查看了Console后,发现报错类似如下:
在这里插入图片描述
原因是跨域问题。即浏览器的同源策略,要求同源才能访问。大致过程是:浏览器会在请求从服务器返回后查看是否有Access-Control-Allow-Origin头信息,若有才接受数据;否则拒绝请求。

于是修改后端代码,在Controller类上添加了@CrossOrigin。重启项目后仍然无法解决。

发现会不会是云服务器的nginx没有配置同源策略?于是在/etc/nginx/nginx.conf文件添加内容如下:
在这里插入图片描述

最后果然访问成功!看来还是nginx没有设置跨域搞的鬼。
在这里插入图片描述

总结:出现这个报错的原因有两个:
● Swagger少了host配置;
● 忽视了Nginx也有跨域策略;

跨域资源共享

跨域资源共享(CROS):是解决跨域问题的策略之一,也是主流浏览器支持的功能。通过额外的HTTP请求头来允许浏览器上的一个源能访问另一个源的服务器。

一个跨域HTTP请求中,当浏览器发送请求时会携带Origin字段,表示来自哪个源的请求,服务器接受请求则会判断是否为允许的源,若是,则返回请求时添加以下几个字段:
在这里插入图片描述
(其中Access-Control-Allow-Headers指服务器允许的自定义Header字段名)

其次,对某些复杂请求,则会触发CORS预检请求,以避免服务器遭受一些未知风险。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值