接下來要講的是 JavaScript中的跨域 這個奇葩的問題,很多人在面試的時候也是被聞到自閉的問題。我會從下面三個方面去講
1.什麼是跨域?
跨域:跨域是指從一個域名的網頁去請求另一個域名的資源。比如:從 www.baidu.com 這個域名去訪問 www.taobao.com這個域名下數據,正常請求的情況下是失敗的,失敗的原因就是就 跨域請求了,它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript施加的安全限制。
跨域的嚴格一點的定義是:只要 協議,域名,端口有任何一個的不同,就被當作是跨域
2.什麼是同源策略?
同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,所謂同源是指,域名,協議,端口相同。
如果非同源(域名,協議,端口只要有其中一個不相同就是非同源),那麼在請求數據時,瀏覽器會在控制檯中報一個異常,提示拒絕訪問。
- 非同源受到的限制
- cookie不能讀取 (如我在自己的站點無法讀取博客園用戶的cookie)
- dom無法獲得
- ajax請求不能發送
3.爲什麼要跨域請求數據
既然有安全問題,那爲什麼又要跨域呢? 有時公司內部有多個不同的子域,比如一個是A域 ,而應用是放在B域 , 這時想從 B域去訪問 A域的資源就屬於跨域。