處理跨域的方法有許多種。這里主要是工作中常用到的幾種方式趾代,這里總結(jié)一下。
方法一:(vue框架中使用代理的方法调鲸,來解決跨域問題。)
? ? ? ? ? ?通過vue-cli創(chuàng)建的vue項目中挽荡,有一個config文件藐石,這個文件夾中有一個index.js文件。通過修改index.js中proxy內(nèi)的內(nèi)容定拟。從而實現(xiàn)前端項目跨域請求問題于微。
? ? ? ? 應用重定向的方式解決跨域問題。
而vue中青自,解決跨域問題株依,則是利用
webpack代理應用中的一個插件 webpack-dev-server,
在這個插件里延窜,內(nèi)置了一個http-procy-middleware恋腕,??
這里通過http-procy-middleware方法,來處理跨域問題逆瑞。
方法二: (ajax中使用JSONP荠藤,來處理跨域問題。)
? ? ? ? jsonp方法處理呆万,其實就是?
? ? ? ? json是一種基于文本的數(shù)據(jù)交換方式商源,或者叫數(shù)據(jù)描述格式车份。
? ? ? ? jsonp是資料格式json的一種“使用模式”谋减。
? ? ? ? jsonp其實就是利用script元素的這個開放策略,網(wǎng)頁可以得到
從其它來源動態(tài)產(chǎn)生的JSON資料扫沼,這種使用方式其實就是jsonp出爹。
JSON & JSONP:JSON 是一種基于文本的數(shù)據(jù)交換方式,或者叫做數(shù)據(jù)描述格式缎除。JSONP是資料格式JSON的一種“使用模式”严就,可以讓網(wǎng)頁從別的網(wǎng)域要資料,由于同源策略器罐,一般來說位于server1.example.com的網(wǎng)頁無法與不是 server1.example.com的服務器溝通梢为,而HTML的script元素是一個例外。利用script元素的這個開放策略轰坊,網(wǎng)頁可以得到從其他來源動態(tài)產(chǎn)生的JSON資料铸董,而這種使用模式就是所謂的JSONP。
方法三:? CORS訪問方法肴沫,解決跨域粟害。
Cross-Origin Resource Sharing(CORS)跨來源資源共享是一份瀏覽器技術(shù)的規(guī)范,提供了 Web 服務從不同域傳來沙盒腳本的方法颤芬,以避開瀏覽器的同源策略悲幅,是 JSONP 模式的現(xiàn)代版套鹅。與 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求汰具。用 CORS 可以讓網(wǎng)頁設(shè)計師用一般的 XMLHttpRequest卓鹿,這種方式的錯誤處理比 JSONP 要來的好。另一方面郁副,JSONP 可以在不支持 CORS 的老舊瀏覽器上運作〖跷現(xiàn)代的瀏覽器都支持 CORS。
CORS是W3c工作草案存谎,它定義了在跨域訪問資源時瀏覽器和服務器之間如何通信拔疚。CORS背后的基本思想是使用自定義的HTTP頭部允許瀏覽器和服務器相互了解對方,從而決定請求或響應成功與否既荚。W3C CORS 工作草案
同源策略:是瀏覽器最核心也最基本的安全功能稚失;同源指的是:同協(xié)議,同域名和同端口恰聘。精髓:認為自任何站點裝載的信賴內(nèi)容是不安全的句各。當被瀏覽器半信半疑的腳本運行在沙箱時,它們應該只被允許訪問來自同一站點的資源晴叨,而不是那些來自其它站點可能懷有惡意的資源凿宾;參考:JavaScript 的同源策略
cors 和JSONP之間的對比:
? ? ? ? 都能解決ajax直接請求普通文件時,存在的跨域無權(quán)訪問的問題兼蕊。
? ? (1)初厚、JSONP只能實現(xiàn)GET請求,而CORS支持所有類型的HTTP請求孙技。
? ? (2)产禾、使用CORS,開發(fā)者可以使用普通的XMLHttpRequest發(fā)起請求和獲取數(shù)據(jù)牵啦,比起JSONP有更好的錯誤處理亚情。
? ? ? (3)、JSONP主要被老的瀏覽器支持哈雏,它們往往不支持CORS,
? ?而絕大多數(shù)數(shù)現(xiàn)代瀏覽器都已經(jīng)支持了CORS.