问题概述
前端h5请求后端服务,两者的域名不同,报出这样的错误
No 'Access-Control-Allow-Origin' header is present on the requested resource.
对于不方便改动后端服务的代码的情况,可以通过配置ng,用以下两种方式都能解决
解决方式一:使用相同域名根据url不同做转发
前端网页源地址:A.domain.com
需要请求的服务端域名:B.domain.com
我们可以指定一个url,比如/brequest/
,将所有前端h5需要发给B.domain.com
的请求都改为发送给A.domain.com/brequest/
。
之后在A.domain.com
域名的ng添加如下配置(注意反斜杠要匹配):
server
{
###############other config#################
location /brequest/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://B.domain.com;
}
###############other config#################
}
解决方式二:修改后端服务域名ng配置
server {
###############other config#################
#允许跨域请求的域,* 代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
###############other config#################
}