1. 程式人生 > >跨域請求的深入剖析

跨域請求的深入剖析

ajax跨域完全講解:

什麼是跨域問題?

就是在前臺呼叫後臺服務介面的時候,如果這個介面不是同一個域的,就會產生跨域問題。

產生跨域問題的原因?(安全的原因)

(1)瀏覽器的限制(跟伺服器後臺本身並沒有任何關係)。

(2)跨域(發出去的請求不是本域名的,比如說域名,埠,協議,任何一個不一樣,都會產生跨域問題)。

(3)xhr(發出的請求是XmlHttpRequest,請求)。


解決思路:

瀏覽器限制(只要有辦法讓瀏覽器不去做這個限制,就不會有跨域問題,實際上我們可以;有指定引數,讓瀏覽器不去校驗,那麼這個跨域問題就解決了,但是意義不大,因為只要想跨域,客戶端每個人都要做改動。)。。

XHR(只要發出去的請求不是xmlhttprequest就可以了,就算是跨域的,瀏覽器也不會報跨域安全問題。基於這個思路我們的方法是【jsonp,通過動態的建立了一個javascript,在javascript發出了一個動態請求,】

 跨域(第一種:【被呼叫方修改程式碼,支援跨域,基於http協議,關於跨域方要求來做的修改,也就是說a域名呼叫b域名的時候,在b域名返回的資訊裡面加入一些資訊欄位,告訴a域名,允許被呼叫,和校驗,那麼就不會有跨域問題了,那麼如果被呼叫方不是自己工司的,無法取得引數】。那就是第二個思路了【呼叫方做修改,隱藏跨域,通過一個代理。從瀏覽器發出去的都是a域名的請求,在代理裡面,吧指定的url轉到b域名裡面,在瀏覽器看上去,他就是同一個域的,就沒有跨域的問題了】)。


如何不讓瀏覽器不做跨域限制:

(跨域問題是前臺瀏覽器做的校驗,後臺伺服器是沒有限制的。命令列輸入。。。比如谷歌,chrome --disable-web-security --user-data-dir-g:\temp3 作用是禁止他做校驗)。


jsonp如何解決跨域:

jsonp是json的一種補充使用方式,他不是一種官方協議。主要是利用script標籤,請求資源何以跨域,變通的一種方案。(動態的建立javascript,請求資源,解決跨域)。

使用jsonp後臺也是需要改動的。

jsonp的實現原理(正常跨域請求的型別type是xhr,而jsonp的請求型別是script。因此不會做校驗,可以解決跨域問題,第二個是返回的型別,普通的ajax請求裡面返回的是json物件,而jsonp返回的是json指令碼。第三個區別是就是請求的url,url中自動的加入了一長串的字串,有個欄位為callback,後臺只要發現有callback引數,就會認為是jsonp請求。返回的資料就會由json轉為javascript,從而解決跨域。)。


帶cookie的跨域: