在當(dāng)下web開發(fā)環(huán)境下,前后端分離開發(fā)是一個(gè)比較主流的架構(gòu)模式。那么因?yàn)椴辉偈悄0寤_發(fā),以至于前后端有可能不在一個(gè)域下(即服務(wù)器的域名是www.a.com, 客戶端域名是 www.b.com),這就造成了 瀏覽器跨域禁止的問題。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),嘉善企業(yè)網(wǎng)站建設(shè),嘉善品牌網(wǎng)站建設(shè),網(wǎng)站定制,嘉善網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,嘉善網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
Python學(xué)習(xí)教程:Python的cors跨域模塊主要做了什么?
實(shí)際上對于前端也有很多的跨域的解決方案。那么其中一種當(dāng)下也比較主流的方式是在后端開啟cors。在我們python 的 web框架中, django,flask,tornado 都有各自的cors的庫來處理跨域的問題。但這些cors具體做了什么呢?我們今天的 Python學(xué)習(xí)教程就來跟大家剖析一下
就像我們知道的,在一次http請求中包含有headers頭信息,大家都是了解的,那么在瀏覽器首次通過options進(jìn)行訪問的會后,會由瀏覽器返回一些header信息來判斷是否允許訪問,那么在后端setheader的時(shí)候添加了一些允許信息,那么他們分別都是什么呢?我們今天給大家介紹最主要的一些鍵值對:
'Access-Control-Allow-Origin:*' 該key是代表允許訪問的域名,當(dāng)前demo的value是 * 代表允許所有域名訪問,這必然是一個(gè)不安全的,但在開發(fā)測試階段可以這樣配置,生產(chǎn)環(huán)境要格外注意
'Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE' 我們知道 http請求 基于restful 有一些方法 那么這里就是允許訪問的方法,例如上邊的post get options delete 等,如果我們?nèi)サ?get,那么將無法通過get方法訪問該服務(wù)
'Access-Control-Allow-Headers:x-requested-with,content-type' 在options預(yù)處理的時(shí)候,如果服務(wù)器返回了這個(gè)響應(yīng)頭的信息,則會允許請求
‘Access-Control-Allow-Credentials: true’ 當(dāng)設(shè)置了該key后 才能允許 cookie被傳過去,否則是傳不過去的。這里也是要注意的。
我們以tornado為例,在setdefaulthaders方法定義一下內(nèi)容,既可以實(shí)現(xiàn)不需要額外安裝cors庫,也可以正??缬颍?/p>
上邊這個(gè)例子是一個(gè)簡單的demo,大家可以根據(jù)自己的業(yè)務(wù)需求再去做額外的調(diào)整。本書記也總之在于對這些header的一些了解。如果有不清楚的地方,大家也可以自行百度google,可以得到更加清晰精準(zhǔn)的解釋。
以上就是基于服務(wù)器端 對請求headers里添加的允許訪問的限制參數(shù),通過將response總進(jìn)行setheaders,瀏覽器就知道本次請求是否允許訪問。我介紹的這些也是比較常見或者說最為核心的一些跨域允許訪問的鍵值對。希望對大家有所幫助。下期的 Python學(xué)習(xí)教程,伙伴們可以期待一下!有不清楚的地方可以留言!