瀏覽器版本:
一.現象:
解決方案:
方案一:(已論證)
步驟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端口的項目