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

解决SpringBootSwagger跨域请求失败的问题
文章讲述了在SpringBoot应用中使用Swagger遇到的跨域问题,问题源于缺少Swagger的host配置和Nginx服务器未配置跨域策略。通过在Controller添加@CrossOrigin注解以及修改Nginx配置,最终解决了TypeError:Failedtofetch的错误,使得跨域请求能够成功。CORS是处理跨域问题的一种机制,涉及Origin、Access-Control-Allow-Origin等HTTP头部信息。
部署运行你感兴趣的模型镜像

问题及解决过程

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预检请求,以避免服务器遭受一些未知风险。

您可能感兴趣的与本文相关的镜像

GPT-oss:20b

GPT-oss:20b

图文对话
Gpt-oss

GPT OSS 是OpenAI 推出的重量级开放模型,面向强推理、智能体任务以及多样化开发场景

### Vue3与Vite项目中动态导入模块时报错 `TypeError: Failed to fetch` 的解决方案 #### 错误原因分析 当遇到 `TypeError: Failed to fetch dynamically imported module` 这类错误时,通常意味着 Vite 或浏览器在尝试加载通过动态 `import()` 导入的模块时遇到了网络请求失败的情况。这可能是由于多种因素引起的,包括但不限于服务器配置不当、CORS 问题、文件路径不正确或是服务端未正确处理 HTTP 请求[^1]。 #### 解决方法一:检查并修正文件路径 确保所有动态导入语句中的相对路径都是相对于当前 JavaScript 文件的位置来指定的,并且这些路径指向实际存在的资源位置。如果使用的是绝对路径,则需确认其根目录设置无误。对于某些特定场景下的路径解析问题,可以考虑调整构建工具的相关配置选项以适应项目的结构需求[^4]。 ```javascript // 正确示例 const component = await import('@/components/MyComponent.vue'); ``` #### 解决方法二:启用 CORS 支持 如果是源资源共享 (Cross-Origin Resource Sharing, CORS) 所致的问题,在开发环境中可以通过修改本地 Webpack Dev Server 配置或其他类似的开发服务器设置来允许来自不同名的数据访问;而在生产环境下则要依据所使用的托管平台文档来进行相应的安全策略设定,比如 Nginx 反向代理等措施[^2]。 #### 解决方法三:优化服务器响应头 有时即使解决了上述两个方面的问题仍然会碰到此异常提示框弹出的现象,这时就需要进一步排查是不是因为缺少必要的 MIME 类型声明或者是其他影响到客户端能否正常下载 JS/CSS 等静态资产的关键头部信息缺失造成的了。针对这种情况建议开发者们仔细核对自己部署后的网站返回给用户的每一个 HTTP 响应包里是否包含了正确的 Content-Type 字段值以及 ETag 缓存控制机制等内容[^3]。 #### 解决方法四:更新依赖版本 考虑到部分旧版库可能存在兼容性缺陷从而引发此类 bug ,因此保持各个框架及其插件处于最新稳定状态也是十分重要的一步操作 。特别是像 Vite 和 Vue CLI 这样的快速迭代型前端工程化解决方案更是如此,及时跟进官方发布的补丁能够有效减少不必要的麻烦发生几率。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值