關(guān)于 CORS 的基礎(chǔ)知識在 MDN上有很詳細(xì)的描述HTTP訪問控制(CORS)和可能會有的隱患框仔。CORS機(jī)制及其風(fēng)險
不過有一點需要注意霎冯,跨域的請求啃炸,最終是會被目標(biāo)服務(wù)器當(dāng)作一個正常的請求處理畦娄,只是瀏覽器攔截了返回結(jié)果。
A頁面里有一個ajax請求訪問B服務(wù)的接口熟尉,B服務(wù)沒有設(shè)置 Access-Control-Allow-Origin
這個header归露。
查看B的 nginx 的 access_log 還是可以看到請求被正確處理,返回200狀態(tài)碼斤儿。
192.168.10.1 - - [18/Aug/2019:17:12:36 +0800] "GET /test HTTP/1.1" 200 40 "http://a.test/test.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
經(jīng)過測試發(fā)現(xiàn):如果將設(shè)置 withCredentials 為 true剧包,瀏覽器會攜帶上cookie
請求目標(biāo)服務(wù)器,服務(wù)器正常處理和相應(yīng)往果。
<script>
$.ajaxSetup({xhrFields: {withCredentials: true}});
$.get('http://b.test/test',[], function (data) {
alert(data);
});
</script>
也就是說你可以在A頁面攜帶上B的身份憑證數(shù)據(jù)去搞事情疆液。除非A頁面是在自己可以控制的瀏覽器(App 內(nèi)置瀏覽器),那樣就可以攔截B服務(wù)器返回的數(shù)據(jù)包棚放。不過A都已經(jīng)在自己的App了枚粘,想玩啥不行馅闽?