如何解决swagger-editor在线接口调试时的跨域问题

文章目录

  • 一,序言
  • 二,问题重现
    • 1. 运行swagger-editor
    • 2. 运行接口服务
    • 3. 问题重现步骤
  • 三,解决问题思路
    • 1. 去除浏览器安全限制
    • 2. 服务器接口统一处理
    • 3. 委托nginx转发
  • 四,完整接口代码传送

一,序言

在 Docker 运行swagger-editor实现在线接口文档维护与调试 文章中,我们简单了解了如何在docker运行应用,接下来我们实际操作的时候,便可能遇到接口调试不通的问题。

这个问题的根本原因:浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源

下面我们便来重现,解决这个问题。

二,问题重现

1. 运行swagger-editor

请参考 Docker 运行swagger-editor实现在线接口文档维护与调试

2. 运行接口服务

docker-compose.yml

version: '3'
services:docker-demo:image: registry.cn-shanghai.aliyuncs.com/00fly/docker-demo:0.0.1container_name: docker-demodeploy:resources:limits:cpus: '0.80'memory: 300Mreservations:cpus: '0.05'memory: 100Mports:- 80:8080restart: on-failurelogging:driver: json-fileoptions:max-size: 5mmax-file: '1'

运行命令,启动接口服务

docker-compose up -d

3. 问题重现步骤

打开接口文档复制单个接口文档
在这里插入图片描述
将内容粘贴到swagger-editor左边, 依次点击 try it out、Execute
在这里插入图片描述
在这里插入图片描述
发现接口报错,跨域调用被拒绝。

三,解决问题思路

1. 去除浏览器安全限制

客户端行为,不太建议,大家可以自行搜索:浏览器关闭跨域限制、chrome 关闭跨域限制

2. 服务器接口统一处理

springmvc或springboot工程,统一在需要允许跨域的类或方法上添加@CrossOrigin注解
在这里插入图片描述
此方法在可以改造接口代码的情况下,建议采用。

3. 委托nginx转发

具体思路就是客户端A需要访问接口C,因跨域无法直接访问

跨域访问失败
客户端A
接口C

现在服务器B安装nginx服务,客户端A直接将请求发送到服务器B某端口,由nginx将请求转发给接口C

客户端A
nginx转发
接口C

C返回结果后,由nginx主动添加header信息,返回A。

具体操作为:在nginx配置文件 nginx.conf 新增一行

 include conf.d/*.conf;

在这里插入图片描述
在conf.d目录(不存在就新建)下新建conf文件,如 00fly.conf内容如下:

server {listen 8081;   proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location / {  add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';if ($request_method = 'OPTIONS') {return 204;}proxy_read_timeout 1800;proxy_next_upstream http_502 http_504 error timeout invalid_header;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass http://175.24.127.215:8080;}
}

实现监听8081端口,将请求转发到 http://175.24.127.215:8080,重点是标红的这段,实现添加允许跨域信息header
在这里插入图片描述
放出最后访问成功信息
在这里插入图片描述

四,完整接口代码传送

https://gitee.com/00fly/docker-demo


有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/191939.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lec14 File systems 笔记

文件系统中核心的数据结构就是inode和file descriptor 分层的文件系统: 在最底层是磁盘,也就是一些实际保存数据的存储设备,正是这些设备提供了持久化存储。在这之上是buffer cache或者说block cache,这些cache可以避免频繁的读…

【C/C++笔试练习】继承和派生的概念、虚函数的概念、派生类的析构函数、纯虚函数的概念、动态编译、多态的实现、参数解析、跳石板

文章目录 C/C笔试练习选择部分(1)继承和派生的概念(2)程序分析(3)虚函数的概念(4)派生类的析构函数(5)纯虚函数的概念(6)动态编译&…

Filter和ThreadLocal结合存储用户id信息

ThreadLocal并不是一个Thread,而是Thread的局部变量。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。ThreadLoc…

Windows10下Tomcat8.5安装教程

文章目录 1.首先查看是否安装JDK。2.下载3.解压到指定目录(安装路径)4.启动Tomcat5.常见问题5.1.如果出现报错或者一闪而过5.2.Tomcat乱码 1.首先查看是否安装JDK。 CMD窗口输入命令 java -version 2.下载 历史版本下载地址:https://archi…

JDBC,Java连接数据库

下载 JDBC https://mvnrepository.com/ 创建项目,然后创建一个目录并将下载好的 jar 包拷贝进去 选择 Add as Library,让这个目录能被项目识别 连接数据库服务器 在 JDBC 里面,使用 DataSource 类来描述数据库的位置 import com.mysql.cj.…

Lstm+transformer的刀具磨损预测

视频讲解: 基于Lstm+transformer的刀具磨损预测实战_哔哩哔哩_bilibili 结果展示: 数据展示: 主要代码: # pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple/ # pip install optuna -i https://pypi.tuna.tsinghua.edu.cn/simple/ import numpy as np…

OpenCV C++ 图像 批处理 (批量调整尺寸、批量重命名)

文章目录 图像 批处理(调整尺寸、重命名)图像 批处理(调整尺寸、重命名) 拿着棋盘格,对着相机变换不同的方角度,采集十张以上(以10~20张为宜);或者棋盘格放到桌上,拿着相机从不同角度一通拍摄。 以棋盘格,第一个内焦点为坐标原点,便于计算世界坐标系下三维坐标; …

国内优质企业网盘推荐:满足您的文件存储与共享需求

企业网盘是主要用于企业工作过程中给的文件存储、共享以及协作。很多用户在挑选文件协作工具时更偏爱国内的工具,原因是使用上可能更贴合国人的使用习惯! 那么现在国内做的比较好的企业网盘有什么? Zoho Workdrive企业网盘,ZOHO…

linux配置固定ip(两种方法)

首先刚下载的vm,刚创建的虚拟机,肯定是需要配置ip的 其次以前我的每次都是设置自动ip,这样每次登录都会自动获取ip地址,并且每次的ip都不相同。 ~方法: 开机登陆后 1)Cd /etc/sysconfig/network-scripts 2)Vi ifcf…

通过 Canal 将 MySQL 数据实时同步到 Easysearch

Canal 是阿里巴巴集团提供的一个开源产品,能够通过解析数据库的增量日志,提供增量数据的订阅和消费功能。使用 Canal 模拟成 MySQL 的 Slave,实时接收 MySQL 的增量数据 binlog,然后通过 RESTful API 将数据写入到 Easysearch 中。…

Django的可重用HTML模板示例

01-配置并运行Django项目 首先按照博文 https://blog.csdn.net/wenhao_ir/article/details/131166889配置并运行Django项目。 02-创建可重用模板文件 templates目录下新建目录common,然后在目录common下新建文件:navbar.html,并写入下面的…

mac无法向移动硬盘拷贝文件怎么解决?不能读取移动硬盘文件怎么解决

有时候我们在使用mac的时候,会遇到一些问题,比如无法向移动硬盘拷贝文件或者不能读取移动硬盘文件。这些问题会给我们的工作和生活带来不便,所以我们需要找到原因和解决办法。本文将为你介绍mac无法向移动硬盘拷贝文件怎么回事,以…