1、定義: 跨域,指的是瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器施加的安全限制。 那麼問題來了,什麼是同源策略呢? 同源策略:功能變數名稱,協議,埠相同。 例:同一瀏覽器的兩個tab頁中分別打開來百度和谷歌的頁面 當瀏覽器的百度tab頁執行一個腳本的時候會檢查這個腳本是屬於哪個 ...
1、定義:
跨域,指的是瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器施加的安全限制。
那麼問題來了,什麼是同源策略呢? 同源策略:功能變數名稱,協議,埠相同。 例:同一瀏覽器的兩個tab頁中分別打開來百度和谷歌的頁面 當瀏覽器的百度tab頁執行一個腳本的時候會檢查這個腳本是屬於哪個頁面的(即檢查是否同源,只有和百度同源的腳本才會被執行) 如果非同源,那麼在請求數據時,瀏覽器會在控制臺中報一個異常,提示拒絕訪問。 同源策略是瀏覽器的行為,是為了保護本地數據不被JavaScript代碼獲取回來的數據污染,因此攔截的是客戶端發出的請求回來的數據接收 即請求發送了,伺服器響應了,但是無法被瀏覽器接收。
2、例子:
http://www.taobao.com/index.html 調用 http://www.taobao.com/server.php (同源)
http://www.taobao.com/index.html 調用 http://www.tencent.com/server.php (taobao/tencent 跨域)主功能變數名稱不同
http://www.taobao.com/index.html 調用 http://zzz.taobao.com/server.php (www/zzz 跨域)子功能變數名稱不同
http://www.taobao.com:8080/index.html 調用 http://www.taobao.com:8088/server.php (8080/8088,跨域)埠不同
http://www.123.com/index.html 調用 https://www.123.com/server.php (協議不同:http/https,跨域)
請註意:localhost和127.0.0.1雖然都指向本機,但也屬於跨域。
3、解決辦法:
1、JSONP:
只支持GET請求,不支持POST請求。
2、代理:
代理模式從後臺繞過瀏覽器端