什么是CORS狞尔?
CORS(Cross-Origin Resource Sharing ) 全稱“跨域資源共享”丛版,它允許瀏覽器向跨站服務(wù)器發(fā)送XHR請求。CORS的出現(xiàn)偏序,使得網(wǎng)站開發(fā)者可對受信任的站點(域名)繞過瀏覽器同源策略的限制页畦,提供了極大的靈活性。
什么是同源策略
出于安全的考慮研儒,瀏覽器通過XHR向服務(wù)器發(fā)送請求時豫缨,必須遵循同源策略。所謂“同源”端朵,是指【域名】好芭,【協(xié)議】,【端口】相同冲呢。
如果沒有同源策略
在解釋同源策略為什么很重要之前舍败,我們先討論另外一個問題:為什么前端使用cookie校驗登錄態(tài),而客戶端使用URL中的token敬拓?
我見過最多的回答是:瀏覽器已經(jīng)實現(xiàn)了cookie的整一套機制邻薯,沒必要再用token那一套,而客戶端要自己實現(xiàn)一套cookie機制太麻煩了乘凸。
上面的回答對嗎弛说?我認為太表象了,只回答了果翰意,而非因。為什么瀏覽器要采用cookie機制實現(xiàn)登陸校驗信柿,才是問題的關(guān)鍵冀偶。
我認為造成兩者差異的其中一個關(guān)鍵點在于:客戶端的url,是不可見的渔嚷,而瀏覽器是可見的进鸠。cookie(token)是用戶登錄的生命線,試想下http://www.reibang.com/index.php?token={secret_token}
是多么美麗的畫面形病。
如果我們繼續(xù)深入思考下去客年,能找到更多的原因,只是本篇重點不在此漠吻,不再贅述量瓜。
通過上面的說明,我們明白了cookie是網(wǎng)站登錄的前提途乃,是時候回答【如果沒有同源策略】的危害了绍傲。
假如你的瀏覽器同時開了兩個tab: A 和 B。A登錄了qq.com
,如果瀏覽器沒有同源策略限制烫饼,B此時就可以不斷向qq的服務(wù)器發(fā)送跨域請求(獲取用戶資料猎塞、消費Q幣、發(fā)表QQ空間杠纵、刪除好友等等)荠耽。你說B沒有qq.com
的登陸信息,不能做到比藻?那我建議你再好好復(fù)習(xí)一遍cookie機制铝量。
同源策略也帶來不便
假設(shè)你有3個域名:a.example.com
| b.example.com
| c.example.com
, 三個都是你的服務(wù)韩容,但彼此間無法跨域請求款违,作為網(wǎng)站管理端,怎一個“蛋疼”了得群凶?
講到這里插爹,又要插一句題外話了,在CORS出現(xiàn)之前请梢,站點間是怎樣跨域通信的赠尾?沒錯,就是大名鼎鼎的JSONP毅弧。JSONP你聽過气嫁,但使用該技術(shù)需要防范CSRF攻擊你了解過嗎?這個話題我們下次再聊够坐。
篇幅太長寸宵,就此打住,下一篇我們再具體講解服務(wù)端CORS怎樣配置元咙。