今天早上在地鐵看了點基礎知識的考察題,看到了一個JS跨域的問題,仔細想了想自己腦子裡竟然只剩下jsonp跨域和用nginx反向代理進行跨域,想著還有別的幾種方法,就是想不起來,這個人呢,一上歲數這個腦子就不好使,為了防止下次又遺忘了,所以特意寫一篇隨筆來記錄一下JS中實現跨域的方式 1.jsonp請 ...
今天早上在地鐵看了點基礎知識的考察題,看到了一個JS跨域的問題,仔細想了想自己腦子裡竟然只剩下jsonp跨域和用nginx反向代理進行跨域,想著還有別的幾種方法,就是想不起來,這個人呢,一上歲數這個腦子就不好使,為了防止下次又遺忘了,所以特意寫一篇隨筆來記錄一下JS中實現跨域的方式
1.jsonp請求
2.document.domain
3.window.name
4.window.postMessage
5.CORS
6.Web Sockets
7.使用伺服器進行反向代理
jsonp請求
jsonp的原理時利用script標簽的跨域特性,可以不受限制的從其他域中載入資源,類似的標簽還有<img>,具體的使用方法在我前面的博文中已經寫過,
註意:jsonp只支持GET請求而不支持其他類型的請求
doucment.domain
這種方式主要用在主功能變數名稱相同,子功能變數名稱不同的情況下
window.name
window的name屬性有個特征:在一個視窗(window)的生命周期內,視窗所載入的所有頁面都是共用一個window.name,每個頁面對window.name都有讀寫許可權,window.name是持久存在一個視窗載入過的所有頁面中的,並不會因新頁面的載入而進行重置
window.postMessage
window.postMessage是html5中實現跨域訪問的一種新方式,可以使用它來向其他的window對象發送消息,無論這個window對象是屬於同源還是不同源
CORS
CORS背後的基本思想,就是使用自定義的HTTP頭部讓瀏覽器和伺服器進行溝通,從而決定請求或響應是應該成功還是應該失敗,
這個需要伺服器設置header :Access-Control-Allow-Origin即可
webSocket
webSocket的原理:在JSchuangjianlewebSocket之後,會有一個HTTP請求發送到瀏覽器以發起鏈接,取得伺服器響應後,建立的連接會使用HTTP升級從HTTP協議交換為websocket協議
使用伺服器進行反向代理
我個人常用的nginx進行反向代理,之前也試過用nodeJS自己搭建一個伺服器進行反向代理,具體的步驟暫時不詳述,各位可以搜一下,一搜一大堆
好了,暫時的話就這些,但是我在工作中常用的還是最後一種用nginx伺服器進行反向代理