当前位置: 首页 > article >正文

如何解决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.1
    container_name: docker-demo
    deploy:
      resources:
        limits:
          cpus: '0.80'
          memory: 300M
        reservations:
          cpus: '0.05'
          memory: 100M
    ports:
    - 80:8080
    restart: on-failure
    logging:
      driver: json-file
      options:
        max-size: 5m
        max-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.kler.cn/news/135033.html

相关文章:

  • 海外IP代理如何助力跨境电商?
  • 海外媒体发稿:出口贸易媒体发稿16个超实用技巧-华媒舍
  • 系列九、JUC强大的辅助类
  • 3.ubuntu20.04环境的ros搭建
  • 使用requests库进行网络爬虫:IP请求错误的解决方法
  • 免费小程序商城搭建之b2b2c o2o 多商家入驻商城 直播带货商城 电子商务b2b2c o2o 多商家入驻商城 直播带货商城 电子商务
  • 2.发送邮件+开发注册功能
  • uniapp、小程序canvas相关
  • 金蝶云星空ScpSupRegHandler任意文件上传漏洞复现 [附POC]
  • 【【VDMA彩条显示实验之四 含C语言代码】】
  • android studio导入eclipse项目
  • SpringBoot中文乱码问题解决方案
  • Git常用操作-MD
  • 系列十、ReentrantReadWriteLock
  • Ubuntu 安装VMware Tools选项显示灰色,如何安装VMware Tools
  • 红海营销时代,内容占位的出海品牌更有机会营销占位
  • 探讨MySQL存储过程返回记录集
  • JSON 格式的接口测试流程【Eolink Apikit】
  • 推荐一个windows上传linux服务器/linux服务器的docker镜像的工具,摆脱docker cp,以及解决常见问题。
  • C#的WebRequest类
  • selenium
  • 达芬奇DaVinci Resolve Studio 18.6.3 for Mac
  • 三、机器学习基础知识:Python常用机器学习库(图像处理相关库)
  • Qt的委托代理机制
  • gRPC 四模式之 双向流RPC模式
  • 安全加速cdn可以起到什么作用?
  • Docker中的RabbitMQ已经启动运行,但是管理界面打不开
  • 36、Flink 的 Formats 之Parquet 和 Orc Format
  • 【Python百宝箱】图解未来:数据可视化引领智慧决策时代
  • 15.ORACLE11g的归档方式和日志文件的相关操作