全文目录,一步到位
- 1.前言简介
- [2. nignx角度解决方案](#2. nignx角度解决方案)
-
- [2.1 分析问题原因](#2.1 分析问题原因)
-
- [2.1.1 翻译一波](#2.1.1 翻译一波)
- [2.1.2 分析及解决方案](#2.1.2 分析及解决方案)
- [2.2 nginx配置如下](#2.2 nginx配置如下)
-
- [2.2.1 增加一个代理配置](#2.2.1 增加一个代理配置)
- [2.2.2 使用方式](#2.2.2 使用方式)
- [2.3 问题解决](#2.3 问题解决)
-
- [2.3.1 改完不生效](#2.3.1 改完不生效)
- [3. 其他解决方案](#3. 其他解决方案)
1.前言简介
先看报错信息:
Access to XMLHttpRequest at 'https://apis.map.qq.com/ws/geocoder/v1/?address=***\&key=***\&get_poi=\*' from origin 'https://域名' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
2. nignx角度解决方案
2.1 分析问题原因
场景: 前端自己请求地图, 没有通过后端服务
所以只能在nginx代理中去添加配置
2.1.1 翻译一波
从https://***
源访问https://apis.map.qq.com/ws/geocoder/v1/
的XMLHttpRequest已被CORS策略阻止:在被请求的资源上没有Access- control - allow - origin
头。
2.1.2 分析及解决方案
分析
腾讯地图的api 报跨域,
- 后端需要通过服务器代理
- 设置请求头在转发到 腾讯地图地址
解决方案:
经过
多次
测试, 选定一个方案创建一个路径 起名/map/v1/ (特别注意最后面的
/
)修改nginx配置conf
添加 此路径location
2.2 nginx配置如下
2.2.1 增加一个代理配置
位置如下
示例代码:
bash
location /map/v/ {
# 路径重写
rewrite /map/v/(.*)$ /$1 break;
proxy_pass https://apis.map.qq.com;
# proxy_pass https://www.baidu.com/;
#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_set_header X-Forwarded-Proto $scheme;
# 添加CORS响应头部
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' '*';
add_header 'Access-Control-Allow-Headers' '*';
add_header 'Access-Control-Max-Age' 1728000;
# 对于预检请求(OPTIONS),直接返回200
if ($request_method = OPTIONS) {
return 204;
}
}
2.2.2 使用方式
原来请求: https://apis.map.qq.com/ws/geocoder/v1/...
现在请求: https://你的域名/map/v/...
2.3 问题解决
2.3.1 改完不生效
重启nginx服务
清除浏览器缓存
/更换浏览器- 可以使用
postman/apipost
尝试- 如果nginx是docker部署的 可以去看看
容器内配置是否与本地挂载目录配置
相同- 确认一下位置是否正确
3. 其他解决方案
前端解决
或者后端服务远程调用 服务内配置跨域(不推荐)
作者pingzhuyan 感谢观看