码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 如何解决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'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    运行命令,启动接口服务

    docker-compose up -d
    
    • 1

    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;
    
    • 1

    在这里插入图片描述
    在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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

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

    四,完整接口代码传送

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


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

    -over-

  • 相关阅读:
    Maven 中引用其他项目jar包出现BOOT-INF问题
    【云服务器 ECS 实战】云服务器新手指南(配置+使用详解)
    vue通过vant列表实现下拉到底部加载更多列表数据
    2022“杭电杯”中国大学生算法设计超级联赛(6)
    Project软件为什么设置完成百分比为100%,是这样显示的啊!
    商城系统开发,如何确保用户数据的安全性?
    java毕业设计下载含论文+PPT+源码等]javaweb企业财务|记账|账单管理系统设计与实现
    WPF 附加属性+控件模板,完成自定义控件。建议观看HandyControl源码
    Windows右键添加用 VSCODE 打开
    springboot进行微信公众号相关开发:(一)编写接口激活配置信息用,用以实现公众号与配置信息接口的绑定
  • 原文地址:https://blog.csdn.net/qq_16127313/article/details/134482704
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号