请求url图片资源时跨域,报错:has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘header is present

本文详细阐述了跨域问题的成因、常见现象,以及提供了解决方案,包括前端请求头添加Access-Control-Allow-Origin、后端设置响应头、OSS跨域配置和使用Nginx处理跨域问题的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、原因

跨域是由于浏览器的“同源策略”导致的,只要主机、端口号、协议三者任一不同,都会出现跨域问题。
有些道友会发现同样的接口或请求在postman中进行模拟时,却不会出现这样的问题。这是因为postman不遵守同源策略,所以也不会有跨域问题。

2、现象

跨域报错如下图所示在这里插入图片描述

3、解决办法

1.前端请求头添加Access-Control-Allow-Origin

在该接口的请求头添加

'Access-Control-Allow-Origin': '*';

添加成功后,点击请求接口时的请求标头上会出现该行
在这里插入图片描述

2.后端响应头添加Access-Control-Allow-Origin

response.setHeader(Access-Control-Allow-Origin,"*");

同理,添加成功后,点击请求接口时的响应标头上会出现该行
在这里插入图片描述

3.OSS添加跨域设置

点击登录oss后台 [https://oss.console.aliyun.com/] 选择Bucket列表 选择需要设置的Bucket,选择数据安全,然后选择跨域设置,具体操作如下图所示。在这里插入图片描述在这里插入图片描述
最后点击编辑或新创建规则,进行如下设置
在这里插入图片描述

4.检查读写权限

5.nginx设置

先将http图片转存为本地域名下的图片,然后由Nginx设置代理

 location ^~ /third_image/ {
    add_header 'Access-Control-Allow-Origin' "$http_origin" always;
    add_header 'Access-Control-Allow-Credentials' 'true' always;
    add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' always;
    add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-  Since,Keep-Alive,Origin,User-Agent,X-Requested-With' always;
    proxy_pass https://XXX.com/;
 }

Nginx设置参照:Nginx解决跨域问题 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present

4、写在最后

各位道友解决问题时可先尝试1-3这几种方法。如若不行再尝试第四种,最后一种办法写的稍微简略,可参考原文。

前端问题是指在浏览器中,当一个Web应用程序(Web page、Web API等)向另一个源(domain、protocol、port)发起请求,浏览器会根据同源策略(Same-Origin Policy)限制该请求。如果请求的目标与当前页面的源不同,则浏览器会阻止该请求,抛出“has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.”的错误信息。解决这个问题的方法有以下几种: 1. 服务器端设置响应头Access-Control-Allow-Origin,允许指定的源访问资源。例如,设置Access-Control-Allow-Origin: *,表示允许所有源访问资源。 ```javascript // 服务器端设置响应头 response.setHeader('Access-Control-Allow-Origin', '*'); ``` 2. 服务器端设置响应头Access-Control-Allow-Credentials,允许客户端发送包含凭据的请求。例如,设置Access-Control-Allow-Credentials: true,表示允许客户端发送包含凭据的请求。 ```javascript // 服务器端设置响应头 response.setHeader('Access-Control-Allow-Credentials', true); ``` 3. 服务器端设置响应头Access-Control-Allow-Methods,允许客户端使用的HTTP方法。例如,设置Access-Control-Allow-Methods: GET, POST,表示允许客户端使用GET和POST方法。 ```javascript // 服务器端设置响应头 response.setHeader('Access-Control-Allow-Methods', 'GET, POST'); ``` 4. 服务器端设置响应头Access-Control-Allow-Headers,允许客户端发送的请求头。例如,设置Access-Control-Allow-Headers: Content-Type,表示允许客户端发送Content-Type请求头。 ```javascript // 服务器端设置响应头 response.setHeader('Access-Control-Allow-Headers', 'Content-Type'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值