中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Flask框架怎么實現ajax跨域請求

發布時間:2021-06-03 16:26:25 來源:億速云 閱讀:180 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關使用Flask框架怎么實現ajax跨域請求,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

問題:

前端ajax請求后端接口出現跨域問題,如下圖。

使用Flask框架怎么實現ajax跨域請求

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

什么是Access-Control-Allow-Origin?

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

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

  • 請求協議http,https的不同

  • domain的不同

  • 端口port的不同

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

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

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

跨域資源共享(CORS)是瀏覽器提供的一種跨域協商機制,讓前后端協商是否可以發出跨域請求。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
同一域名,不同協議不允許
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框架為例,有兩種方法。

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

復制代碼 代碼如下:

pip3 install flask-cors

pip3 install flask-cors
from flask_cors import *

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

使用Flask框架怎么實現ajax跨域請求

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

第二種接口函數自定義添加屬性。

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

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

2.利用nginx反向代理

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

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

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監聽localhost的80端口,本地的81端口有都是經過localhost的80端口進行訪問。

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

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

上述就是小編為大家分享的使用Flask框架怎么實現ajax跨域請求了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

铁岭县| 太仓市| 丹寨县| 手机| 天津市| 惠州市| 扶风县| 桂阳县| 临海市| 建宁县| 安福县| 台北市| 日照市| 全椒县| 宝鸡市| 福建省| 昆明市| 邢台县| 永新县| 四会市| 吉木乃县| 梨树县| 寿宁县| 砀山县| 息烽县| 琼结县| 东方市| 大港区| 沙雅县| 楚雄市| 苍梧县| 上杭县| 阿尔山市| 罗城| 香格里拉县| 贺州市| 双城市| 建水县| 平和县| 满城县| 义乌市|