關於跨域的what,why,how

1.跨域是什麼鬼?

前臺調用後臺的接口,若是不是同一個域,就會產生跨域問題前端

2.爲何會產生跨域問題?

1. 瀏覽器限制

瀏覽器出於安全考慮,發現請求是跨域的時候,會作一些校驗,校驗不經過,就會有跨域問題

2. 發出的請求不是本域的

發出的請求,不是本域的,協議,域名,端口,任何一個不同,瀏覽器都會認爲是跨域

3. 發出的是XHR(XMLHttpRequest)請求

若是發出的不是XHR請求,即便不是本域的,瀏覽器不會認爲是跨域

3.如何解決跨域問題?

1.讓瀏覽器不作校驗

命令行參數啓動:經過命令行參數啓動瀏覽器(--disable-web-security), 瀏覽器不會檢查

MacOS命令行:
open -n /Applications/Google Chrome.app/ --args --disable-web-security —user-data-dir=/Users/你電腦的名字/MyChromeDevUserData/web

2.jsonp自己

jsonp是用動態建立的script標籤對進行請求  /get?callback=123

爲何jsonp能夠解決跨域問題?

發出的請求不是xhr類型,type是script類型,瀏覽器不作校驗

callback的內容,就是函數名,返回的數據,是做爲函數的參數

jsonp的缺點:

-服務器須要改動代碼
-只支持get方法
-發送的不是xhr請求

3.跨域自己

跨域資源共享CORS:在響應頭增長指定的字段,容許對方調用json

Access-Control-Allow-Origin
            "*" 容許全部域跨域調用
            "http://www.sanjieke.cn" 容許這個域跨域調用
        
Access-Control-Allow-Method
            "*" 容許全部的方法
            "GET" 指定容許的方法
            
帶cookie的跨域,origin必須是全匹配,不能是*號,須要增長Access-Control-Allow-Credentials爲true,前端也須要設置xhr.withCredentials = true 帶上cookie


帶自定義頭的跨域,增長Access-Control-Allow-Headers,值爲自定義頭

更詳細的解讀 https://segmentfault.com/a/11...segmentfault

相關文章
相關標籤/搜索