一、為什么會(huì)出現(xiàn)跨域問(wèn)題
出于瀏覽器的同源策略限制巩搏。同源策略(Sameoriginpolicy)是一種約定,它是瀏覽器最核心也最基本的安全功能丰辣,如果缺少了同源策略,則瀏覽器的正常功能可能都會(huì)受到影響糯俗。可以說(shuō)Web是構(gòu)建在同源策略基礎(chǔ)之上的杖玲,瀏覽器只是針對(duì)同源策略的一種實(shí)現(xiàn)淘正。同源策略會(huì)阻止一個(gè)域的javascript腳本和另外一個(gè)域的內(nèi)容進(jìn)行交互。所謂同源(即指在同一個(gè)域)就是兩個(gè)頁(yè)面具有相同的協(xié)議(protocol)鸿吆,主機(jī)(host)和端口號(hào)(port)
二、什么是跨域
當(dāng)一個(gè)請(qǐng)求url的協(xié)議蕉毯、域名思犁、端口三者之間任意一個(gè)與當(dāng)前頁(yè)面url不同即為跨域
三、flask中如何解決跨域問(wèn)題
1.安裝flask-cors模塊
pip install flask-cors
2.主路由部分增加設(shè)置
如有藍(lán)圖一般在app的init中
# -*- coding=utf-8 -*-
from flask import Flask
from datetime import timedelta
import datetime
from flask_cors import * # 導(dǎo)入模塊
def create_app():
app = Flask(__name__)
CORS(app, supports_credentials=True) # 設(shè)置跨域
from .reduce import reduce
app.register_blueprint(reduce)
return app
3. CORS參數(shù)說(shuō)明
參數(shù) | 類(lèi)型 | Head字段 | 說(shuō)明 |
---|---|---|---|
resources | 字典棉磨、迭代器或字符串 | 無(wú) | 全局配置允許跨域的API接口 |
origins | 列表学辱、字符串或正則表達(dá)式 | Access-Control-Allow-Origin | 配置允許跨域訪(fǎng)問(wèn)的源,* 表示全部允許 |
methods | 列表策泣、字符串 | Access-Control-Allow-Methods | 配置跨域支持的請(qǐng)求方式,如:GET差油、POST |
expose_headers | 列表任洞、字符串 | Access-Control-Expose-Headers | 自定義請(qǐng)求響應(yīng)的Head信息 |
allow_headers | 列表、字符串或正則表達(dá)式 | Access-Control-Request-Headers | 配置允許跨域的請(qǐng)求頭 |
supports_credentials | 布爾值 | Access-Control-Allow-Credentials | 是否允許請(qǐng)求發(fā)送cookie交掏,false是不允許 |
max_age | 整數(shù)、字符串 | Access-Control-Max-Age | 預(yù)檢請(qǐng)求的有效時(shí)長(zhǎng) |