解决前端跨域:has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header...

在前端工作中,有时候会碰到跨域的问题,就是请求的接口地址和本身的服务器不属于一个域内,此时浏览器会报错:

XXXXX(请求的跨域url)has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested

网上有很多的解决办法,可以用jsonp来请求等等。

这里可以用nginx的转发功能来实现。

比如我这里axios请求的接口是

http://xxxx.xxxx.com/abc/efg/hi?12341234324

我用了axios的get方法直接请求了这个连接,不出意外的浏览器报错。

此时我在nginx里配置了这样一条

 

location /abc/efg/ {

             proxy_pass http://xxxx.xxxx.com;

        }

代码请求的连接直接改为

/abc/efg/hi?1234234242432

此时去掉了前面的域名,实际上请求的是我本地的地址:

127.0.0.1:端口号/abc/efg/hi?123121313

然后nginx碰到了

/abc/efg/

所以自动的捕捉匹配这个端口的地址,转到了

http://xxxx.xxxx.com/abc/efg/hi?12341234324

可以实现的原因在于,出现了跨域问题是浏览器的报错,只要后台处理一下,用nginx转发就可以轻松的解决问题。

注意:我在配置了nginx后,实际测试时没有生效,一度以为自己配的有问题,后来发现时我自己的电脑问题,事实证明,觉得配的没问题还一直折腾的时候,那就是电脑问题了,可以换服务器上试一试。nginx经常不生效的,感觉windows上的nginx不靠谱,建议不确定的时候可以把跳转连接换成www.baidu.com来实验一下。我本地测试的时候百度跳转都没生效,有时候怀疑电脑有问题可能是正确的。


我是第二弹分割线


 

第二弹:

在解决了跨域问题后,又出现了一个老大难的问题:如何解决https请求的问题。

当上文的nginx放在生产环境时,请求对方的连接变成了

https://xxxx.xxxx.com/abc/efg/hi?12341234324

然后在重启nginx的时候,无法启动nginx,我本身的服务器是http的,对方是https,启动的时候报错

https protocol requires SSL support

1.单纯的只是我方nginx安装的时候没有装ssl模块,解决方式参考连接

https://www.cnblogs.com/piscesLoveCc/p/6120875.html

2.在nginx配置里不需要放上监听443端口的内容,配置证书跟密钥

            listen 443 ssl;

            ssl_certificate /usr/local/Tengine/sslcrt/ wosign.com.crt;

            ssl_certificate_key /usr/local/Tengine/sslcrt/ wosign.com .Key;

 

就是这些东西,只是我们请求别人的接口,不需要配置证书跟密钥。除非是我方自己是https的时候,才需要监听端口和配置自己的证书跟密钥。

前端解决"CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource"的方法有几种。 一种解决方法是,在后端服务器的响应头中添加"Access-Control-Allow-Origin"字段,并将其值设置为前端域名,以允许该域名访问资源。例如,可以在后端代码中添加以下代码来解决该问题: ``` response.setHeader("Access-Control-Allow-Origin", "http://your-front-end-domain.com"); ``` 另一种解决方法是在前端代码中使用代理服务器来请求资源。代理服务器位于与后端服务器相同的域中,并在前端代码中将请求发送到代理服务器,然后由代理服务器再转发请求到后端服务器。这样可以避免CORS问题,因为请求是从与后端服务器相同的域发送的。可以使用Webpack Dev Server或Nginx等工具来设置代理服务器。 还有一种解决方法是在后端服务器上启用CORS。这样,后端服务器将在响应头中添加"Access-Control-Allow-Origin"字段,并将其值设置为"*",表示允许所有域名访问资源。请注意,这种方法可能会增加安全风险,因此需要谨慎使用。 最后,可以使用一些浏览器插件或扩展程序来绕过CORS限制。这些工具可以修改浏览器的请求头,从而允许跨域请求。 请根据你的具体情况选择适合的解决方法来解决"CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource"的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [解决前后端跨域报错:has been blocked by CORS policy: No ‘Access-Control-Allow-Origin](https://blog.csdn.net/wsaicyj/article/details/127814374)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [前端跨域问题的解决方案Access to XMLHttpRequest at ‘http..’ from origin ‘null‘ has been blocked ...](https://blog.csdn.net/weixin_40756509/article/details/123730126)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [corsyusha:简单快速的代理,可在针对现有API进行原型设计时绕过CORS问题,而不必担心CORS](https://download.csdn.net/download/weixin_42176612/18261495)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值