我在尝试为我的REST API设置CORS时遇到问题。我目前使用的是Flask-Restplus包。下面是我的端点的样子:
@api_ns.route('/some/endpoint')
@api_ns.response(code=400, description='Bad Request.')
class AEndpointResource(Resource):
@api_ns.param(**api_req_fields.POST_DOC)
@api_ns.expect(POST_REQUIRED_BODY)
@api_ns.marshal_with(code=201,
fields=my_api_models.MyEndpointResponse.get_serializer(),
description=my_api_models.MyEndpointResponse.description)
def post(self) -> Tuple[my_api_models.MyEndpointResponse, int]:
"""
The post body
"""
# Some logic here
return response, 200如果我编写了一个小的javascript代码片段,并试图在浏览器中启动它,我会得到一个错误,因为没有CORS头文件。我看到Flask-Restplus已经在处理OPTIONS请求了,而我没有告诉他任何事情。(根据this link的说法,这是有意义的,提到从Flask0.6开始,OPTIONS请求是自动处理的)
我的问题是,即使我尝试使用以下命令来修饰我的端点:
from flask-restplus import cors # <--- Adding this import
...
class AnEndpointResource(Resource):
...
@my_other_decorators
...
@cors.crossdomain(origin='*') # <--- Adding this new decorator on my endpoint
def post(self) -> Tuple[my_api_models.MyEndpointResponse, int]:
...没有什么变化,我仍然得到了和以前一样的结果。我从OPTIONS请求中得到一个HTTP 200,像以前一样自动处理,但我在响应中看不到我的新标头(即Access-Control-Allow-Origin)。
我是不是漏掉了什么?
发布于 2019-12-28 19:58:08
使用Flask-CORS,它可以工作:
from flask import Flask, request
from flask_restplus import Resource, Api, fields
from flask_cors import CORS
# configuration
DEBUG = True
# instantiate the app
app = Flask(__name__)
api = Api(app)
app.config.from_object(__name__)
# enable CORS
CORS(app, resources={r'/*': {'origins': '*'}})发布于 2018-12-28 04:33:46
在我的笔记本电脑和浏览器上进行本地测试时,我能够通过在响应中添加报头来解决cors问题。
之前:return state, 200
之后:return state, 200, {'Access-Control-Allow-Origin': '*'}
发布于 2018-06-08 21:24:59
我进行了测试,您要查找的标头被添加到对后续GET请求的响应中。装饰器@cors.crossdomain有一个默认设置为True的选项automatic_options。这意味着您的OPTIONS请求仍将自动处理。
请参阅this测试以检查它应该如何工作。
flask_restplus.cors模块没有文档,所以不确定您是否应该使用它。
https://stackoverflow.com/questions/50708821
复制相似问题