1.跨域指?
跨域是指瀏覽器的不執行其他網站腳本的,由於瀏覽器的同源策略造成,是對JavaScript的一種安全限制
說白點理解,當你通過瀏覽器向其他服務器發送請求時,不是服務器不響應,而是服務器返回的結果被瀏覽器限制了。
同源策略的同源
同源指的是協議、域名、端口 都要保持一致
http://www.123.com:8080/index.html (http協議,www.123.com 域名、8080 端口 ,只要這三個有一項不一樣的都是跨域,這里不一一舉例子)
http://www.123.com:8080/matsh.html(不跨域)
http://www.123.com:8081/matsh.html(端口不一樣,跨域)
注意:localhost 和127.0.0.1 雖然都指向本機,但也屬於跨域。
2.跨域的解決方案
>JSONP方式,只支持GET請求,不支持POST請求。
>反向代理,ngixn
> 配置瀏覽器(我配置了谷歌,屬性->目標> 在后面追加 --args --disable-web-security --user-data-dir 注意有個空格)。設置成功打開瀏覽器是出現已欄提示證明已成功配置。
>vue 項目跨域配置
Vue-cli 創建的項目,可以直接利用 Node.js 代理服務器,通過修改vue proxyTable接口實現跨域請求
proxyTable: { '/api': { //代理地址 target: 'http://10.1.0.34:8000/', //需要代理的地址 changeOrigin: true, //是否跨域 secure: false, pathRewrite: { '^/api': '/' //本身的接口地址沒有 '/api' 這種通用前綴,所以要rewrite,如果本身有則去掉 } } }
api指的就是target的地址
參數proxyTable詳解:
vue-cli的config文件里的參數:proxyTable,這個參數主要是一個地址映射表,你可以通過設置將復雜的url簡化,例如我們要請求的地址是api.xxxxxxxx.com/list/1
,可以按照如下設置:
proxyTable: { '/list': { target: 'http://api.xxxxxxxx.com', pathRewrite: { '^/list': '/list' } } }
這樣我們在寫url的時候,只用寫成/list/1
就可以代表api.xxxxxxxx.com/list/1
.
這樣實現跨域的原理是利用本地虛擬的服務器,代接受發送請求
參考詳細鏈接 https://www.cnblogs.com/goloving/p/8901189.html
> 后台配置請求head
header('Access-Control-Allow-Origin:*');//允許所有來源訪問
header('Access-Control-Allow-Method:POST,GET');//允許訪問的方式
《完結》
《后續補充》==========================================================================》 最近研究node 遇到跨域的例子,下面補充點 (node服務器執行)
1.jsonp實現跨域的方式,了解,反正也不會用到了 吧
缺點: get請求,前后端都要修改
優點:無兼容問題(js哪個瀏覽器不兼容 站出來)
思路:利用js保存全局變量來傳遞數據,因為js不受同源策略控制,script標簽加載機制
html
js 獲取變量,解析數據
2. cors方式
分類:簡單請求和預檢請求(非簡單請求)
原理:如圖
ajax請求結果被瀏覽器截胡了,cors就是紅色箭頭,告訴瀏覽器這是我要的,別管閑事,然后就可以拿到數據了【笑吧笑吧 表達也就這樣了】
對於跨源AJAX請求是簡單請求,瀏覽器就自動在頭信息之中,添加一個Origin字段。
GET /cors HTTP/1.1
Origin: http://m.xin.com
Host: api.alice.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0...
這個orgin我們可以指定的,如果訪問的域不是指定范圍或者沒有指定origin都會報錯跨域問題。
譬如:Access-Control-Allow-Origin:'localhost:5000'// * 表示所有域都可以
其他的
跨域報錯示例
解決方式
1. api請求baseulr指向服務器(我這里http指定端口4000)
2. Cors設置跨域允許
js文件中設置
結果(請求url指向也是4000端口了)
這里有個不錯文章解析了cors的原理https://www.cnblogs.com/qiujianmei/p/11649905.html
3. cookie、預檢請求、代理服務器proxy解決
................