首页 > 其他分享 >跨域问题

跨域问题

时间:2023-04-24 21:55:53浏览次数:33  
标签:Control Access 跨域 header 问题 ssl proxy Allow

可以在后端接口层或nginx代理层做配置,不过只需要一处做配置,重复的话会报错。

golang gin配置

// 处理跨域请求,支持options访问
func Cors() gin.HandlerFunc {
	return func(c *gin.Context) {
		method := c.Request.Method

		// 允许跨域,同一顶级域名的cookie共享
		c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin"))

		// 允许request headers中自定义参数,如果request headers中自定义参数不在当中,会引发跨域错误
		c.Header("Access-Control-Allow-Headers", "Content-Type,contenttype,AccessToken,X-CSRF-Token,Authorization,Token,x-token,x-user-id")
		
		// 允许跨域的方法
		c.Header("Access-Control-Allow-Methods", "POST,GET,DELETE,PUT,OPTIONS")

		// 后端在 response headers 中自定义了参数,跨域允许前端拿到
		c.Header("Access-Control-Expose-Headers", "Content-Length,Access-Control-Allow-Origin,Access-Control-Allow-Headers,Content-Type,token")
		
		// 允许携带根域名下的cookies
		c.Header("Access-Control-Allow-Credentials", "true")
		
		// 用来指定本次预检请求的有效期,单位为秒,,在此期间不用发出另一条预检请求
		c.Header("Access-Control-Max-Age", "3600")

		//放行所有OPTIONS方法
		if method == "OPTIONS" {
			c.AbortWithStatus(http.StatusNoContent)
		}
		// 处理请求
		c.Next()
	}
}

func Routers() *gin.Engine {
	Router := gin.Default()
	Router.Use(Cors())
}

nginx代理配置

如果后端api接口项目没配置,也可以在nginx层做配置

# 未来产业
server {
        listen 443 ssl http2;
        server_name xxx.com;  # 自己的域名,请求头中不同host分发到对应虚拟主机
        add_header Strict-Transport-Security "max-age=31536000" always;

        ssl_certificate /etc/nginx/conf.d/gkx_ssl/ssl.crt;
        ssl_certificate_key /etc/nginx/conf.d/gkx_ssl/ssl.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;

        client_max_body_size 1024m;

        location / {
            # 允许跨域;后端设置了,nginx就不用设置了,不然会重复报错
            add_header Access-Control-Allow-Origin $http_origin;
            add_header Access-Control-Allow-Credentials true;
            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_pass   http://127.168.0.3:808/;
            proxy_http_version  1.1;
            proxy_set_header    Connection "";
            proxy_set_header Host $host;
            proxy_connect_timeout 5;

            #下边是为获取真实IP所做的设置
            proxy_set_header    X-Real-IP        $remote_addr;
            proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;
            proxy_set_header    X-Forwarded-Proto $scheme;
            proxy_redirect      default;
        }
    }

server {
        listen 80; # 监听80端口
        server_name xxx.com;  # 绑定证书的域名

        # 强制将http的URL重写成https
        return 301 https://xxx.com$request_uri;

    }

标签:Control,Access,跨域,header,问题,ssl,proxy,Allow
From: https://www.cnblogs.com/beihangxuwei/p/17351058.html

相关文章

  • 题解:【CTS2022】 独立集问题
    题目链接来自2023SDPT-Round1-Day4课上Qingyu的讲解。考虑对于一个点多次操作会发生什么?第一次操作会将周围的点的权值吸过来,自己对答案的贡献乘\(-1\),周围的点的贡献乘\(+1\),得到新的权值\(a_x'=\pma_x\mp\sum_{y\inson_x}a_y\);再一次操作,我们可以将这个新的贡......
  • 解决VMWare Workstation全屏无法使用双显示器的问题
      正常情况下,全屏模式下,通过vmware工具栏的这个按钮可以实现多屏显示:  当某些异常情况下,这个按钮按下去之后,会闪一下然后使用双屏失败,有时候甚至会让虚拟机内部的鼠标消失。这可以通过以下方法解决:在虚拟机内部,注意,是虚拟机的虚拟系统中操作,而非宿主机器上。打开系统服......
  • vue关于请求消息没问题但是还是进入catch块(已解决)
    第一次使用vue中的拦截器,一开始是在拦截器的逻辑代码上有问题(也有可能没问题),然后请求和响应都是没问题的,但是请求之后就是不跳转,然后发现是设置了拦截器的问题,折磨了下拦截器保证了代码能够顺利运行到resolve,但是发现即便是resolve后回到原本的代码中,代码还是运行到catch块中去。......
  • Mount cifs存储时提示not supported问题解决
    Mountcifs存储时提示notsupported问题解决:报错: mounterror(95):Operationnotsupported排查:1、当时刚好是mount2个存储,结果1个可以1个不行,就反馈给负责存储同事查看2个存储的区别2、存储同事查看后得出不行的是比较老的Netapp存储,mounterror(95)错误应该是不支持的smb协议......
  • 第十天第一个问题
    问题描述:编写一个程序,它使用下面的函数:fill_array()将一个double数组的名称和长度作为参数。提示用户输入double值,并将这些值存储到数组中去。当数组被填满或用户输入了非数字的数据的时候结束。show_array()将一个double数组的名称和长度作为参数,并显示该数组的内容。reverse_......
  • VSCode选中空行时光标自动回到行首位置的问题记录
    1、问题描述由于最近更换了VSCode编辑器,出现了一些和之前使用VS不一样的地方,比如当我按下回车新开一行时,会发现该行的格式是正确的,光标会在正确的位置,但是当我继续回车时,上一个空行的格式会被清掉,光标会回到行首2、解决方案1、首先通过RenderWhitespace=all打开了空格显示......
  • Docker容器日志中文乱码问题
    背景:在使用docker部署springboot项目的时候,查看项目日志的过程中,发现中文打印出来的都是乱码:??????楼主是通过dockerfile创建的镜像,解决方案:DcokerFile中增加环境变量ENVTZ'Asia/Shanghai'ENVLANGen_US.UTF-8ENVLANGUAGEen_US:enENVLC_ALLen_US.UTF-8其......
  • 【c&c++】C++ 关于编译出现“undefined reference to `std::cout‘“的问题
    1、问题概述        在使用gcc编译c++代码时会出现undefinedreferenceto`std::cout',如编译如下代码:#include<iostream>usingnamespacestd;intmain(){cout<<"Helloworld!";return0;}然而,gcc下编译出现的问题是: 2、解决方法使用g++编译,g++......
  • 解决springboot不能打包问题
    环境:名称版本springboot2.7.11jdk1.8maven3.6.3在pom.xml中添加如下代码:<build><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</......
  • Ubuntu系统python连接hive遇到的一些问题
    1.第一个问题,sasl这个库安装不上,报缺少sasl.h的问题(#include<sasl/sasl.h>)解决方法:sudoapt-getinstall-ylibsasl2-devgccpython-dev2.第二个问题,连接的时候报CouldnotstartSASL:b‘Errorinsasl_client_start(-4)SASL(-4)解决办法:sudoaptinstalllibsasl2-mod......