解决nginx和gateway网关跨域问题Access to XMLHttpRequest

一、为什么会出现跨域问题?

1、什么是跨域

跨域(Cross-Origin Resource Sharing,简称 CORS)
主要是浏览器的同源策略导致的。
同源策略要求浏览器发出的 AJAX 请求只能发给与请求页面域名相同的 API 服务器,如果发给其他域名就会产生跨域问题。

2、什么是同源策略?

所谓同源(即指在同一个域)就是两个地址具有相同的协议(protocol)、主机(host)和端口号(port)

同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。

同源策略限制以下行为

1. Cookie、LocalStorage 和 IndexDB 无法读取

2. DOM 和 Js对象无法获得

3. AJAX 请求不能发送

注意:跨域限制是浏览器的机制,如果直接在服务端请求,是不会触发跨域限制的。

3、以下情况都属于跨域:

跨域原因说明示例
域名不同www.jd.comwww.taobao.com
域名相同,端口不同www.jd.com:8080 与 www.jd.com:8081
二级域名不同item.jd.com 与 miaosha.jd.com

http和https也属于跨域。

如果域名和端口都相同,但是请求路径不同,不属于跨域,如:www.jd.com/item www.jd.com/goods

同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。

发起ajax请求的那个页面的地址(localhost:5500) 和 ajax请求接口地址(localhost:8080) 不在同一个域中。

而我们刚才是从localhost:5500端口去访问localhost:8080端口,这属于端口不同,跨域了。

二、解决nginx跨域问题

Spring早就给我们提供了解决方案,我们只需要在对应controller上添加一个注解就可以了

我们在 UserController 类上添加跨域标签@CrossOrigin,再进行测试,则测试成功!

@CrossOrigin //解决跨域问题

三、解决gateway网关跨域问题

在网关服务中添加跨域配置

package com.atguigu.srb.gateway.config;
@Configuration
public class CorsConfig {
    @Bean
    public CorsWebFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true); //是否允许携带cookie
      // config.addAllowedOrigin("*"); //可接受的域,是一个具体域名或者*(代表任意域名)
        // springboot升级成2.4.0以上时对AllowedOrigin设置发生了改变,不能有”*“,可以替换成AllowedOriginPattern
        config.addAllowedOriginPattern("*");
        config.addAllowedHeader("*"); //允许携带的头
        config.addAllowedMethod("*"); //允许访问的方式
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsWebFilter(source);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解决跨服务器跨域问题,可以通过配置Nginx来实现。首先,需要在Nginx的配置文件中添加跨域相关的配置。在server块中添加以下配置: ``` server { listen 80; server_name example.com; location / { # 允许跨域域名 if ($http_origin ~* "^http://allowed-domain.com$") { add_header Access-Control-Allow-Origin $http_origin; } # 允许发送Cookie和HTTP认证信息 add_header Access-Control-Allow-Credentials 'true'; # 允许的请求头信息 add_header Access-Control-Allow-Headers 'Origin, X-Requested-With, Content-Type, Accept, Authorization'; # 允许的请求方法 add_header Access-Control-Allow-Methods 'POST, GET, PUT, OPTIONS, DELETE'; # 处理预检请求 if ($request_method = OPTIONS) { return 204; } # 其他配置 ... } } ``` 其中,`allowed-domain.com`是允许跨域访问的域名。你可以根据实际情况修改为你需要允许的域名。 这样配置后,Nginx会在响应头中添加`Access-Control-Allow-Origin`、`Access-Control-Allow-Credentials`、`Access-Control-Allow-Headers`和`Access-Control-Allow-Methods`等字段,从而允许跨域请求。 请注意,以上配置是针对HTTP请求的,如果你的服务器使用HTTPS,需要在配置中添加SSL相关的配置。 另外,如果你的Nginx安装在`/usr/local/nginx`目录下,你可以使用以下命令来启动、停止或重新加载Nginx: ``` cd /usr/local/nginx/sbin ./nginx -v // 查看版本号 ./nginx // 启动Nginx ./nginx -s stop // 停止Nginx ./nginx -s quit // 安全退出Nginx ./nginx -s reload // 重新加载配置文件(常用) ``` 希望以上信息对你有帮助。 #### 引用[.reference_title] - *1* [12-Nginx解决前端项目跨域问题](https://blog.csdn.net/flowerStream/article/details/126731118)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [用nginx解决前端部署跨域问题](https://blog.csdn.net/biaobiaogege/article/details/123920514)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Nginx解决跨域问题](https://blog.csdn.net/weixin_55853065/article/details/127787284)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值