谷歌浏览器 跨域遇到的坑 cors 错误(亲测可行)
浏览器版本:
一.现象:
解决方案:
方案一:(已论证)
步骤1: 谷歌浏览器 打开 chrome://flags/#block-insecure-private-network-requests
步骤2 : 找到 Block insecure private network requests. 设置为Disabled
步骤3 : 关闭谷歌浏览器重新打开网页 解决问题。
方案二:(未论证)
或者 访问使用https 的代替http 的
==================经过==================
1. get 方式请求json,前端调用返回cors error
2.jsonp 方式 :http:xxx.com?callback=callback 还是报错cors
3.最后在同事帮助下,发现谷歌的大bug,参考上面方式或更换火狐或其他浏览器都可以
4. 最后的最后,一切都是尴尬,因为本地绑定了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端口的项目
赞赏码
非学,无以致疑;非问,无以广识