浏览器版本:
一。现象:
解决方案:
方案一:(已论证)
步骤 1: 谷歌浏览器 打开 chrome://flags/#block-insecure-private-network-requests
步骤 2 : 找到 Block insecure private network requests. 设置为 Disabled
步骤 3 : 关闭谷歌浏览器重新打开网页 解决问题。
方案二:(未论证)
或者 访问使用 https 的代替 http 的
================== 经过 ==================
- get 方式请求 json,前端调用返回 cors error
2.jsonp 方式 :http:xxx.com?callback=callback 还是报错 cors
3. 最后在同事帮助下,发现谷歌的大 bug, 参考上面方式或更换火狐或其他浏览器都可以
- 最后的最后,一切都是尴尬,因为本地绑定了 host IP:www.***.com , 相当于拿着 ip 去访问 nginx 服务器,怎么会不产生跨域呢?无论怎么设置都无效的,去掉 这条 host 就好
补充:
首先,客户端通过域名请求服务,如果你在本地的 hosts 文件中配置了该域名与 ip 的映射关系,那么,请求就会直接发送到 hosts 文件中对应的 ip,不会通过 dns 解析(如果本地 hosts 文件中没有配置,就会通过 dns 解析域名)。
这时,请求到达了服务端,服务端的 nginx 拦截了该请求,然后在本地通过域名匹配 server_name,然后,根据 proxy_pass 返回相应的服务给客户端。
本地 host 文件和 nginx 映射的关系
假设客户端 A——–》浏览器 url 请求域名 ——–》域名被 host 解析对应的 IP——–》到对应 IP 的服务器 ——–》先被 nginx 反向代理拦截 ——–》找到 nginx 上一样域名 (nginx.conf 配置文件中 server 里的 server_name)——–》对应的反向映射地址 (nginx.conf 配置文件中同左 server 里的 proxy_pass 就是对应的 Tomcat 里 WEB 的发布路径如 http:localhost:8080)——–》对应 8080 端口的项目
原文地址:谷歌浏览器 跨域遇到的坑 cors 错误(亲测可行)本地 host 文件和 nginx 映射的关系【图文】_码农编程进阶笔记_51CTO 博客