• 前端请求跨域,解决方案


    首先明确一点,同源策略是浏览器的。接口本身不会跨域,很简单的例子:在postman里可以请求任何接口,为啥?因为postman没有同源策略。

    实际上,后端程序彼此直接请求接口,也不会存在跨域,比如一个go程序请求php的接口,不存在跨域。总之,跨域只能浏览器的同源策略有关。

    目前工作中最常见的2个解决方案:cors和nginx代理

    1.cors

    不考虑cookie的情况下,cors工作全部由后端完成,beego的处理:

    beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
    		AllowOrigins:     []string{"http://gpu.ai-galaxy.cn"},
    		AllowMethods:     []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
    		AllowHeaders:     []string{"Origin", "Authorization", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
    		ExposeHeaders:    []string{"Content-Length", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
    	}))
    	beego.Run()

    2.nginx代理

    这个前端需要配置nginx即可,开发环境中用的webpack-dev-serve代理。生产环境换成nginx代理即可,原理类似。

    例子:请求的接口为:https://app.ai-galaxy.cn/login

    nginx配置:

     location ^~ /api {
                rewrite ^/api/(.*)$ /$1 break;
                proxy_pass https://app.ai-galaxy.cn;
    }

    前端配置:

    axios.defaults.baseURL = '/api'
    

     

    解释下:当我们访问前端访问 /api/login时,nginx会代理到https://app.ai-galaxy.cn/login是上。  相当于/api/指向https://app.ai-galaxy.cn/。 /api/和前端同源而不会跨域。

  • 相关阅读:
    日期转换DateTime
    linux 常用命令
    springcloud集成 xxl-job
    maven-阿里云镜像
    mysql 8.0+忘记root密码-linux
    java注解与自定义注解
    mysql联合索引的生效规则
    Maven常用命令及其作用、常见问题、常用命令使用场景举例
    反射的理解
    VirtualBox创建centos
  • 原文地址:https://www.cnblogs.com/xiaochongchong/p/16195262.html
Copyright © 2020-2023  润新知