最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flask框架踩坑之a(chǎn)jax跨域請求實現(xiàn)

 更新時間:2019年02月22日 11:52:14   作者:一杯閃光喵  
這篇文章主要介紹了Flask框架踩坑之a(chǎn)jax跨域請求實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

業(yè)務場景:

前后端分離需要對接數(shù)據(jù)接口。

接口測試是在postman做的,今天才開始和前端對接,由于這是我第一次做后端接口開發(fā)(第一次嘛,問題比較多)所以在此記錄分享我的踩坑之旅,以便能更好的理解,應用。

問題:

前端ajax請求后端接口出現(xiàn)跨域問題,如下圖。

翻譯:因為響應頭沒有"Access-Control-Allow-Origin",所以接口拒絕把數(shù)據(jù)返回給前端。

什么是Access-Control-Allow-Origin?

Access-Control-Allow-Origin是HTML5中定義的一種解決資源跨域的策略。

瀏覽器只允許請求當前域的資源,而對其他域的資源表示不信任。那怎么才算跨域呢?

  • 請求協(xié)議http,https的不同
  • domain的不同
  • 端口port的不同

其實說簡單點,跨域,指的就是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器施加的安全限制。

同源是指:協(xié)議相同,域名相同,端口相同。三者同時成立才能叫同源。

瀏覽器的同源策略從它誕生的那一刻就出現(xiàn)了,具體是指從域名A下的一個頁面(一般是通過ajax請求)獲取域名B下的一個資源,是不被瀏覽器允許的。

跨域資源共享(CORS)是瀏覽器提供的一種跨域協(xié)商機制,讓前后端協(xié)商是否可以發(fā)出跨域請求。CORS添加了若干Access-controll-request-xxx 的頭,給客戶端聲明自己的源、要使用的頭部、用使用的請求方法;添加了若干Access-Controll-Allow-xxx的頭,給服務端聲明自己支持跨域的源、頭部和方法。

URL 說明 是否允許通信
http://www.a.com/a.js
http://www.a.com/b.js
同一域名下 允許
http://www.a.com/lab/a.js
http://www.a.com/script/b.js
同一域名下不同文件夾 允許
http://www.a.com:8000/a.js
http://www.a.com/b.js
同一域名,不同端口 不允許
http://www.a.com/a.js
https://www.a.com/b.js
同一域名,不同協(xié)議 不允許
http://www.a.com/a.js
http://70.32.92.74/b.js
域名和域名對應ip 不允許
http://www.a.com/a.js
http://script.a.com/b.js
主域相同,子域不同 不允許
http://www.a.com/a.js
http://a.com/b.js
同一域名,不同二級域名(同上) 不允許(cookie這種情況下也不允許訪問)
http://www.cnblogs.com/a.js
http://www.a.com/b.js
不同域名 不允許

解決方案(從后端解決)

1.后臺接口允許跨域請求

以Python Flask框架為例,有兩種方法。

第一種第三方插件實現(xiàn),只需要安裝第三方插件就可以輕松地為所有接口添加響應頭。

復制代碼 代碼如下:
pip3 install flask-cors

pip3 install flask-cors
from flask_cors import *

app = Flask(__name__)
# r'/*' 是通配符,讓本服務器所有的URL 都允許跨域請求 
CORS(app, resources=r'/*')

實際上就是為接口響應頭添加了一個Access-Control-Allow-Origin并設置值*表示所有網(wǎng)站都可以請求。

第二種接口函數(shù)自定義添加屬性。

res.headers['Access-Control-Allow-Origin'] = '*'
return res

為返回結(jié)果res屬性headers設置Access-Control-Allow-Origin值為*。只對當前接口有效。

2.利用nginx反向代理

說到nginx,不得不說真的很強大,也帶來很多便利用于解決一些頭疼的難題。

一般來說可以用來做:靜態(tài)頁面的服務器、靜態(tài)文件緩存服務器、網(wǎng)站反向代理、負載均衡服務器等等,而且實現(xiàn)這一切,基本只需要改改那萬能的配置文件即可。

server {
    listen    80;
    server_name localhost;
      location / {
      proxy_pass http://localhost:81;
      proxy_redirect default;
    }

		location /apis { #添加訪問目錄為/apis的代理配置

			rewrite ^/apis/(.*)$ /$1 break;
			proxy_pass  http://localhost:82;
    }
}

1.由配置信息可知,我們讓nginx監(jiān)聽localhost的80端口,本地的81端口有都是經(jīng)過localhost的80端口進行訪問。

2.我們特殊配置了一個“/apis”目錄的訪問,并且對url執(zhí)行了重寫,最后使以“/apis”開頭的地址都轉(zhuǎn)到“http://localhost:82”進行處理。

3.rewrite ^/apis/(.*)$ /$1 break,代表重寫攔截進來的請求,并且只能對域名后邊以“/apis”開頭的起作用,例如www.a.com/apis/msg?x=1重寫。只對/apis重寫。rewrite后面的參數(shù)是一個簡單的正則 ^/apis/(.*)$ ,$1代表正則中的第一個(),$2代表第二個()的值,以此類推。break代表匹配一個之后停止匹配。

總結(jié)一下,搭建一個nginx并把相應代碼部署在服務器本機,由頁面請求本域名的一個地址,轉(zhuǎn)由nginx代理到目標服務器處理后返回結(jié)果給頁面。這樣就完美解決了跨域問題。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python相關(guān)庫設置技巧保護你的C盤

    Python相關(guān)庫設置技巧保護你的C盤

    這篇文章主要為大家介紹了Python相關(guān)庫設置,保護你的C盤技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • 詳解Python中圖像邊緣檢測算法的實現(xiàn)

    詳解Python中圖像邊緣檢測算法的實現(xiàn)

    這篇文章主要為大家詳細介紹了python中圖像邊緣檢測算法的原理及實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Python+OpenCV進行人臉面部表情識別

    Python+OpenCV進行人臉面部表情識別

    這篇文章主要介紹了通過Python OpenCV實現(xiàn)對人臉面部表情識別,判斷人是否為笑臉,文中的示例代碼非常詳細,需要的朋友可以參考一下
    2021-12-12
  • 利用Python實現(xiàn)簡單的驗證碼處理

    利用Python實現(xiàn)簡單的驗證碼處理

    這篇文章主要介紹了利用Python實現(xiàn)簡單的驗證碼處理,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • Python+seaborn實現(xiàn)聯(lián)合分布圖的繪制

    Python+seaborn實現(xiàn)聯(lián)合分布圖的繪制

    聯(lián)合分布(Joint Distribution)圖是一種查看兩個或兩個以上變量之間兩兩相互關(guān)系的可視化圖,在數(shù)據(jù)分析操作中經(jīng)常需要用到。本文將通過seaborn實現(xiàn)繪制聯(lián)合分布圖,需要的可以參考一下
    2023-02-02
  • python中matplotlib的用法及繪制簡單圖形詳解

    python中matplotlib的用法及繪制簡單圖形詳解

    這篇文章主要給大家介紹了關(guān)于python中matplotlib的用法及繪制簡單圖形的相關(guān)資料,matplotlib是python中用于繪制各種圖像的模塊,功能十分強大,通常與pandas模塊搭配使用,可以生成各種樣視的圖片,用于數(shù)據(jù)的分析和展示,需要的朋友可以參考下
    2024-03-03
  • Python爬蟲設置ip代理過程解析

    Python爬蟲設置ip代理過程解析

    這篇文章主要介紹了Python爬蟲設置ip代理過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Python實現(xiàn)socket非阻塞通訊功能示例

    Python實現(xiàn)socket非阻塞通訊功能示例

    這篇文章主要介紹了Python實現(xiàn)socket非阻塞通訊功能,結(jié)合實例形式分析了Python使用socket模塊進行非阻塞通訊的原理、多線程及客戶端、服務器端相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-11-11
  • Python?Conda安裝包報錯:PackagesNotFoundError兩種解決方法

    Python?Conda安裝包報錯:PackagesNotFoundError兩種解決方法

    這篇文章主要給大家介紹了關(guān)于Python?Conda安裝包報錯:PackagesNotFoundError的兩種解決方法,這通常意味著安裝程序正在尋找的環(huán)境包沒有在 conda 的默認通道中找到,文中將解決的辦法介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • Django 解決阿里云部署同步數(shù)據(jù)庫報錯的問題

    Django 解決阿里云部署同步數(shù)據(jù)庫報錯的問題

    這篇文章主要介紹了Django 解決阿里云部署同步數(shù)據(jù)庫報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05

最新評論

获嘉县| 荆州市| 海晏县| 西吉县| 安丘市| 顺昌县| 玛多县| 鞍山市| 湖口县| 眉山市| 长武县| 福鼎市| 上高县| 射洪县| 康马县| 西乌| 东山县| 云龙县| 宁化县| 乌拉特后旗| 宝坻区| 秀山| 沙田区| 玉龙| 格尔木市| 铁岭市| 蓝山县| 龙游县| 偏关县| 东城区| 佛坪县| 永胜县| 万源市| 宜都市| 岑巩县| 宝丰县| 四平市| 罗甸县| 马山县| 东海县| 唐山市|