ajax跨域問題(一)
如果你在前臺呼叫後臺服務介面的時候,如果這個介面不是同一個域的就會產生跨域問題。
發生ajax跨域的原因?
1.瀏覽器的限制
發生跨域問題的原因不是伺服器不允許前臺呼叫,而是瀏覽器限制了跨域請求。出於安全的考慮,當瀏覽器發現你的請求是跨域的請求時,它會做一些校驗,如果校驗不通過,它就會報錯。
2.跨域
你所發出去的請求不是你本域的。我們的請求裡面,協議,域名,埠任何一個不一樣瀏覽器就會認為是跨域。
3.XHR(XMLHttpRequest)請求
只要不是傳送xhr請求,瀏覽器一般都不會限制這個請求。
解決思路:
1.針對瀏覽器限制導致的跨域
可以通過制定引數讓瀏覽器不做校驗瀏覽器就不會限制了。但是這個改動價值不大,因為你得需要每個人都要做這個改動,而且是客戶端的改動。
2.針對XHR
既然傳送xhr會被報錯,那隻要不是xhr請求即使是跨域瀏覽器也不會報錯。基於這種思路,解決方案是jsonp.他的原理是通過動態的建立script標籤,在script裡面傳送跨域請求。但是jsonp的解決方案有很多弊端,無法滿足開發要求。
3.針對跨域(兩種思路)
1.讓被呼叫方去修改程式碼。比如說要從A域名呼叫B域名的時候,在B域名返回的資訊裡面加入一些欄位,告訴瀏覽器我允許A域名呼叫,那麼瀏覽器只要通過校驗他就不會報跨域安全問題。這種是支援跨域的思路。
2.當被呼叫方不是我們自己公司的,我們無法修改,就得采取第二種思路:呼叫方修改。這個思路是隱藏跨域。原理是通過一個代理,從瀏覽器裡面傳送的都是A域名的請求,在代理裡面把指定的url轉到B域名裡面。這個轉發機制在瀏覽器認為就是同一個域名了,這樣就不存在跨域的問題了。