6. 在前端開(kāi)發(fā)中,如何處理跨域請(qǐng)求?請(qǐng)列舉幾種解決方法。
跨域請(qǐng)求是指瀏覽器不能直接向不同域名的服務(wù)器發(fā)起請(qǐng)求。解決跨域問(wèn)題的方法有以下幾種:http://fangfengwang8.cn/issue/tutorial?zhuanlanId=Mg58Em&uuid=43521d43a8e341f888324dd690363024
JSONP(JSON with Padding):利用script標(biāo)簽的src屬性可以加載任意域名下的js文件的特性,通過(guò)在URL中傳遞callback函數(shù)名,讓服務(wù)端返回指定格式的數(shù)據(jù),前端通過(guò)調(diào)用指定的callback函數(shù)來(lái)獲取數(shù)據(jù)。
CORS(Cross-Origin Resource Sharing):跨域資源共享,是W3C標(biāo)準(zhǔn),需要服務(wù)端在響應(yīng)頭中設(shè)置Access-Control-Allow-Origin字段來(lái)允許前端跨域訪問(wèn)。
代理:通過(guò)后臺(tái)中轉(zhuǎn)請(qǐng)求,將服務(wù)端的數(shù)據(jù)請(qǐng)求發(fā)送到同一域名下的后臺(tái)進(jìn)行處理并返回結(jié)果給前端。
WebSocket:在建立WebSocket連接時(shí)不會(huì)執(zhí)行同源檢測(cè),因此可以使用WebSocket進(jìn)行跨域通信。
發(fā)布JSON數(shù)據(jù)文件,JSONP或者JavaScript加載到頁(yè)面里。但這種方式并不友好,容易暴露數(shù)據(jù)。
設(shè)置Access-Control-Allow-Origin允許跨域,此方法支持IE8+、Chrome、Firefox等現(xiàn)代瀏覽器,或者使用XMLHttpRequest Level 2對(duì)象里面提供的withCredentials屬性的值為true。
在同一根域名下,但是不同二級(jí)域名之間進(jìn)行跨越AJAX請(qǐng)求, 可以通過(guò)設(shè)置document.domain來(lái)解決。
JSONP(JSON with Padding):利用script標(biāo)簽的src屬性可以加載任意域名下的js文件的特性,通過(guò)在URL中傳遞callback函數(shù)名,讓服務(wù)端返回指定格式的數(shù)據(jù),前端通過(guò)調(diào)用指定的callback函數(shù)來(lái)獲取數(shù)據(jù)。
CORS(Cross-Origin Resource Sharing):跨域資源共享,是W3C標(biāo)準(zhǔn),需要服務(wù)端在響應(yīng)頭中設(shè)置Access-Control-Allow-Origin字段來(lái)允許前端跨域訪問(wèn)。
代理:通過(guò)后臺(tái)中轉(zhuǎn)請(qǐng)求,將服務(wù)端的數(shù)據(jù)請(qǐng)求發(fā)送到同一域名下的后臺(tái)進(jìn)行處理并返回結(jié)果給前端。
WebSocket:在建立WebSocket連接時(shí)不會(huì)執(zhí)行同源檢測(cè),因此可以使用WebSocket進(jìn)行跨域通信。
發(fā)布JSON數(shù)據(jù)文件,JSONP或者JavaScript加載到頁(yè)面里。但這種方式并不友好,容易暴露數(shù)據(jù)。
設(shè)置Access-Control-Allow-Origin允許跨域,此方法支持IE8+、Chrome、Firefox等現(xiàn)代瀏覽器,或者使用XMLHttpRequest Level 2對(duì)象里面提供的withCredentials屬性的值為true。
在同一根域名下,但是不同二級(jí)域名之間進(jìn)行跨越AJAX請(qǐng)求, 可以通過(guò)設(shè)置document.domain來(lái)解決。
全部評(píng)論
相關(guān)推薦

點(diǎn)贊 評(píng)論 收藏
分享
04-17 00:50
桂林旅游學(xué)院 Python 點(diǎn)贊 評(píng)論 收藏
分享