Flask

安裝外掛

pip install flask-cors

使用 CORS函式配置全域性路由

from flask_cors import *

app = Flask(__name__)
CORS(app, supports_credentials=True)
from flask_cors import CORS
app = Flask(__name__,)
# r'/*' 是萬用字元,讓本伺服器所有的URL 都允許跨域請求
CORS(app, resources=r'/*')
# 上傳檔案
@uploadFiles.route('/upload', methods=['POST'])
def uploadFile():
result_text = {"statusCode": 200,"message": "檔案上傳成功"}
response = make_response(jsonify(result_text))
response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Methods'] = 'OPTIONS,HEAD,GET,POST'
response.headers['Access-Control-Allow-Headers'] = 'x-requested-with'
return response

Django

安裝外掛

pip install django-cors-headers

新增APP

INSTALLED_APPS = (
'corsheaders',
)

新增中介軟體

MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware', #最好新增至第一行
]

配置白名單

#單個配置
CORS_ORIGIN_WHITELIST =(
' 域名',
)
#正則配置:
CORS_ORIGIN_REGEX_WHITELIST =(r'^(https?://)?(\w+\.)?jim\.com $',)

或者直接允許所有主機跨域

CORS_ORIGIN_ALLOW_ALL = True 預設為False

允許攜帶cookie

CORS_ALLOW_CREDENTIALS = True

請求頭及請求方法的配置:

#預設可以使用的非標準請求頭,需要使用自定義請求頭時,就可以進行修改
CORS_ALLOW_HEADERS = (
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)
#預設請求方法
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
)

防止CSRF

#新增信任的站點 django1.9引入
CSRF_TRUSTED_ORIGINS = (
'change.allowed.com',
)

更多配置詳情點選這裡

Tornado

解決方案

import tornado.web

class BaseHandler(tornado.web.RequestHandler):

    def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.host = ""
self.port = "" # 在初始化方法中新增設定跨域的方法
self.set_default_headers() # 處理OPTIONS域檢請求
def post(self):
self.set_status(204)
self.finish() # 設定跨域的具體方法
def set_default_headers(self):
super().set_default_headers()
# 設定允許的請求頭
self.set_header("Access-Control-Allow-Methods","GET,POST,PUT,DELETE,OPTIONS")
self.set_header("X-XSS-Protecion","1")
self.set_header("Content-Security-Policy","default-src 'self'")
self.set_header("Access-Control-Allow-Credentials","true")
# 設定一些自己定義的請求頭
self.set_header("Access-Control-Allow-Headers",
"Content-Type,Access-Control-Allow-Headers,X-Auth-Token,Y-Auth-Token"
)
self.set_header("Content-Type","application/json; charset=UTF-8")
# 設定允許本地除錯的域名通過!
self.set_header("Access-Control-Allow-Origin",self.request.headers.get("Origin","http://localhost:9090"))
# 如果後面的域名設定為 * ,表示允許所有的域名通過
# self.set_header("Access-Control-Allow-Origin","*")
# self.set_header("Access-Control-Allow-Origin",self.request.headers.get("Origin","*"))

呼叫

class InterFaceHandler(BaseHandler):
def set_default_headers(self):
self.allowMyOrigin()
def get(self, *args, **kwargs):
pass