首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask-RESTplus CORS请求不向响应中添加报头

Flask-RESTplus CORS请求不向响应中添加报头
EN

Stack Overflow用户
提问于 2018-06-06 04:57:55
回答 5查看 7.1K关注 0票数 6

我在尝试为我的REST API设置CORS时遇到问题。我目前使用的是Flask-Restplus包。下面是我的端点的样子:

代码语言:javascript
复制
@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请求是自动处理的)

我的问题是,即使我尝试使用以下命令来修饰我的端点:

代码语言:javascript
复制
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)。

我是不是漏掉了什么?

EN

回答 5

Stack Overflow用户

发布于 2019-12-28 19:58:08

使用Flask-CORS,它可以工作:

代码语言:javascript
复制
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': '*'}})
票数 4
EN

Stack Overflow用户

发布于 2018-12-28 04:33:46

在我的笔记本电脑和浏览器上进行本地测试时,我能够通过在响应中添加报头来解决cors问题。

之前:return state, 200

之后:return state, 200, {'Access-Control-Allow-Origin': '*'}

票数 3
EN

Stack Overflow用户

发布于 2018-06-08 21:24:59

我进行了测试,您要查找的标头被添加到对后续GET请求的响应中。装饰器@cors.crossdomain有一个默认设置为True的选项automatic_options。这意味着您的OPTIONS请求仍将自动处理。

请参阅this测试以检查它应该如何工作。

flask_restplus.cors模块没有文档,所以不确定您是否应该使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50708821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档