1、瀏覽器限制
2、跨域(協議,網域名稱,埠不一樣都是跨域)
3、xhr(xmlhttprequest請求)
同時滿足三個條件才有可能產生跨域問題。
解決跨域問題方案。
1,從瀏覽器出發,允許瀏覽器跨域。
2,從xhr(xmlhttprequest)出發
(1)避免發生跨域。使用jsonp,由於jsonp請求是通過script的方式傳送的(只有xhr的請求方式才有可能產生跨域問題),所以不會產生跨域問題。spring mvc實現過程:前台使用ajax的get請求,將datatype設為「jsonp」;伺服器建立乙個類並繼承抽象類abstractjsonreponsebodyadvice,最後註解@controlleradivece。使用jsonp的弊端,只能使用get方式請求,伺服器需要改動**,傳送的不是xhr請求。
(2)產生跨域後解決。
從被呼叫方考慮,有三種情況,分別是伺服器實現,nginx配置和apache配置。
伺服器實現需要注意兩種情況,簡單請求和非簡單請求。簡單請求是先執行請求再驗證,非簡單請求是先驗證再請求。
非簡單請求(比較常見):put,delect方法的ajax請求,傳送json格式的ajax請求,帶自定義頭的ajax請求。
簡單請求處理方案:在響應頭中新增
access-control-allow-origin=「允許跨域的url」,即跨省域時,請求頭origin的值,所以一般是獲取origin的值。
access-control-allow-method=「*」,允許的方法。
非簡單請求處理方案:在相應頭中新增
access-control-allow-origin=「允許跨域的url」,即跨域時,可以獲取請求頭origin的值。
access-control-allow-method=「*」,允許的方法
access-control-request-headers=「content-type,自定義的header的key」。
帶cookies的跨域解決:在響應頭新增
access-control-allow-credentials,="true",允許使用cookies
ngnix配置:
apache配置:沒搞過
若是使用spring框架:使用@crossorigin註解既可以實現服務端跨域
為什麼會產生跨域,以及解決跨域的方法
答 因為瀏覽器的同源政策,就會產生跨域。比如說傳送的非同步請求是不同的兩個源,就比如是不同的的兩個埠或者不同的兩個協議或者不同的網域名稱。由於瀏覽器為了安全考慮,就會產生乙個同源政策,不是同乙個地方出來的是不允許進行互動的。解決跨域的方法 第一種jsonp的方法。第二種使用cors解決跨域問題,即跨...
跨域相關問題 為何會產生跨域?如何解決跨域?
之前面試官基本都是問如何解決跨域問題,今天遇到乙個公司問什麼是跨域,為什麼會產生跨域問題,雖然之前看過相關的問題,但是突然感覺有點蒙,自我感覺回答的不是很全面和準確,所以啊,看問題還真是得知其然並知其所以然,今天算重新加深一下對跨域的理解!跨域問題是因為瀏覽器的同源策略引起的,一種瀏覽器的安全機制,...
為什麼會產生TCP IP?
在世界各地,各種各樣的電腦執行著不同的作業系統為大家服務,這些電腦在表達同一種資訊的時候所使用的方法千差萬別,就像聖經中上帝打亂了各地人的口音,讓他們無法合作一樣。我們知道,計算機只是單兵作戰不會發揮太大的作用,只有把它們聯合起來,電腦才會發揮它巨大的潛力,於是人們就想方設法的用電線把電腦連線到了一...