摘要:跨域?qū)嵲谑敲嬖嚬僖粋€人的利器。首先,什么是是一個標(biāo)準(zhǔn),全稱是跨域資源共享。它的值是一個布爾值,表示是否允許發(fā)送。設(shè)為,即表示服務(wù)器明確許可,可以包含在請求中,一起發(fā)給服務(wù)器。
面試問到數(shù)據(jù)交互的時候,經(jīng)常會問跨域如何處理。大部分人都會回答JSONP,然后面試官緊接著就會問:“JSONP缺點是什么?。俊边@個時候坑就來了,如果面試者說它支持GET方式,然后面試官就會追問,那如果POST方式發(fā)送請求怎么辦?基礎(chǔ)扎實一些的面試者會說,使用CORS跨域,不扎實的可能就搖搖頭了。
這還沒結(jié)束,如果公司比較正規(guī)或者很在乎技術(shù)功底,你面試的又是重要崗位,HR還想砍你的工資,就會再補一刀,CORS跨域有什么問題呢?這時候能回答上來的就沒幾個了,就算是你答出來兼容性不好,需要IE10+瀏覽器,對方依然有話說,那兼容性怎么處理呢?應(yīng)試者就沒話了,要么被Pass掉,即便留下來,談工資的時候就沒底氣了。
CORS跨域?qū)嵲谑敲嬖嚬賞ass一個人的利器。
為什么會這樣呢?
1.遇到CORS請求的情況不多,開發(fā)者使用這個場景的很少,大部分都JSONP搞定了。
2.開發(fā)者自身技能不扎實,偷懶心態(tài),平常沒有意識和意愿去提升自己的技術(shù)水平。
3.相關(guān)的學(xué)習(xí)資料少、純前端小白搭建可測試的環(huán)境難度大。
面對這條攔路虎,我們今天就徹底解決掉它,讓它不再是我們的軟肋,而是彰顯我們技術(shù)實力的亮點。
首先,什么是CORS?
CORS是一個W3C標(biāo)準(zhǔn),全稱是"跨域資源共享"(Cross-origin resource sharing)。 它允許瀏覽器向跨源服務(wù)器,發(fā)出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制。
優(yōu)缺點
優(yōu)點:
1.支持POST以及所有HTTP請求 2.安全性相對JSOP更高 3.前端要做的事兒比較少
缺點:
1.不兼容老版本瀏覽器,如IE9及其以下 2.需要服務(wù)端支持 3.使用起來稍微復(fù)雜了些
怎么用?
前端部分:
CORS跨域請求
注意點:
1.上面代碼兼容IE8,因為用了XDomainRequest
2.其它代碼你就當(dāng)成XMLHttpRequset用,別考慮什么2.0不2.0的
3.如果你想post數(shù)據(jù),可以往 xhr.send()里面搞
4.這里不建議大家研究"simple methdod"之類的知識,代碼弄懂了會用就行,遇到問題了再查也不晚
后臺部分:
注意點:
1.Access-Control-Allow-Origin: 表示允許任何域名跨域訪問,如果需要指定某域名才允許跨域訪問,只需把Access-Control-Allow-Origin:改為Access-Control-Allow-Origin:允許的域名,實際工作也要這么做2.Access-Control-Allow-Methods:GET,POST 規(guī)定允許的方法,建議控制嚴(yán)格些,不要隨意放開DELETE之類的權(quán)限
2.Access-Control-Allow-Credentials
該字段可選。它的值是一個布爾值,表示是否允許發(fā)送Cookie。默認(rèn)情況下,Cookie不包括在CORS請求之中。設(shè)為true,即表示服務(wù)器明確許可,Cookie可以包含在請求中,一起發(fā)給服務(wù)器。這個值也只能設(shè)為true,如果服務(wù)器不要瀏覽器發(fā)送Cookie,刪除該字段即可。
最后,面試??紗栴}:
CORS和JSONP的應(yīng)用場景區(qū)別?
CORS要求瀏覽器(>IE10)和服務(wù)器的同時支持,是跨域的根本解決方法,由瀏覽器自動完成。優(yōu)點在于功能更加強大支持各種HTTP Method,缺點是兼容性不如JSONP。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/99419.html
摘要:跨域正確的打開方式經(jīng)過對同源策略的了解,我們應(yīng)該要消除對瀏覽器的誤解,同源策略是瀏覽器做的一件好事,是用來防御來自邪門歪道的攻擊,但總不能為了不讓壞人進門而把全部人都拒之門外吧。 跨域這兩個字就像一塊狗皮膏藥一樣黏在每一個前端開發(fā)者身上,無論你在工作上或者面試中無可避免會遇到這個問題。為了應(yīng)付面試,我每次都隨便背幾個方案,也不知道為什么要這樣干,反正面完就可以扔了,我想工作上也不會用到...
摘要:瀏覽器的同源策略固然保障了互聯(lián)網(wǎng)世界的數(shù)據(jù)隱私與數(shù)據(jù)安全,但是如果當(dāng)我們需要使用跨域請求資源時,同源策略又會成為開發(fā)者的阻礙。我們之前提到過,如果想要繞過瀏覽器同源策略,實現(xiàn)使用技術(shù)跨域獲取資源,需要服務(wù)端和客戶端的協(xié)同合作。 瀏覽器的同源策略固然保障了互聯(lián)網(wǎng)世界的數(shù)據(jù)隱私與數(shù)據(jù)安全,但是如果當(dāng)我們需要使用AJAX跨域請求資源時,同源策略又會成為開發(fā)者的阻礙。在本文中,我們會簡單介紹需...
摘要:實際使用時,由于向提交的長度限制在字符,超過了則被瀏覽器拒絕,因此不采用。前端發(fā)起跨域請求就是正常的請求即可。 問題背景瀏覽器從一個域名的網(wǎng)頁去請求另一個域名的資源時,域名、端口、協(xié)議任一不同,都是跨域 在前后端開發(fā)過程經(jīng)常會遇到跨域問題。網(wǎng)上也都有解決方案。 寫這篇文章時,我們碰到的一個場景是:要給s系統(tǒng)做一個擴展,前端的html、js放在s系統(tǒng)里,后端需要做一個單獨的站點N.B....
摘要:的學(xué)習(xí)筆記是異步和的縮寫,它的作用是執(zhí)行異步的網(wǎng)絡(luò)請求。這就是一個格式的,向這個地址請求,將得到一個回調(diào)函數(shù),執(zhí)行就得到數(shù)據(jù)。 AJAX的學(xué)習(xí)筆記 AJAX是異步JavaScript和XML的縮寫,它的作用是執(zhí)行異步的網(wǎng)絡(luò)請求。因為JS是線性同步,如果需要用戶向瀏覽器發(fā)送一個請求,那么就需要等瀏覽器接收到了結(jié)果才能繼續(xù)運行,如果發(fā)送到接受的時間太長,瀏覽器就會很長時間處于假死狀態(tài),這樣...
摘要:什么是跨域要明白什么是跨域之前,首先要明白什么是同源策略同源策略就是用來限制從一個源加載的文檔或腳本與來自另一個源的資源進行交互。最后,解決跨域問題還有一個更通用更強大的方法,我單獨把它拿出來總結(jié)了一篇文章跨域問題的根本解決方案。 什么是跨域? 要明白什么是跨域之前,首先要明白什么是同源策略? 同源策略就是用來限制從一個源加載的文檔或腳本與來自另一個源的資源進行交互。那怎樣判斷是否是同...
閱讀 2551·2021-09-28 09:36
閱讀 3756·2021-09-22 15:41
閱讀 4598·2021-09-04 16:45
閱讀 2252·2019-08-30 15:55
閱讀 2920·2019-08-30 13:49
閱讀 915·2019-08-29 16:34
閱讀 2458·2019-08-29 12:57
閱讀 1777·2019-08-26 18:42