首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Flask-cors不返回任何cors标头作为响应

Python Flask-cors不返回任何cors标头作为响应
EN

Stack Overflow用户
提问于 2018-01-02 17:06:10
回答 1查看 2K关注 0票数 0

我正在使用Flask-Cors==3.0.3,这是我为我的应用程序设置它的方式,其中前端在apache上的localhost:9000上,而后端在localhost:8080

代码语言:javascript
复制
app     = Flask(_name_, template_folder="www/templates", static_folder ="www/static" )
app.config['API_UPLOAD_FOLDER'] = config.API_UPLOAD_FOLDER
app.config['SMOKE_UPLOAD_FOLDER'] = config.SMOKE_UPLOAD_FOLDER

app.config['MONGODB_SETTINGS'] = {
    'db': config.MONGO_DBNAME,
    'host': config.MONGO_URI
}

app.config['CORS_HEADERS'] = 'Content-Type, auth'
app.config['CORS_RESOURCES'] = {r"/apis/*":{"origins":"http://localhost:9000"}}
app.config['CORS_METHODS'] = "GET,POST,OPTIONS"
app.config['CORS_SUPPORTS_CREDENTIALS'] = True

CORS(app)

我的要求是:

代码语言:javascript
复制
OPTIONS /apis/register HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:57.0) Gecko/20100101 Firefox/57.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Origin: http://localhost:9000
Connection: close

回应是:

代码语言:javascript
复制
HTTP/1.1 200 OK
Server: nginx/1.10.1 (Ubuntu)
Date: Tue, 02 Jan 2018 08:52:29 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: close
Allow: POST, OPTIONS

我也试着这样做,而不是上面的方法,结果仍然是一样的…响应中没有CORS标头:(

代码语言:javascript
复制
Cors = CORS(app, resources={r"/apis/*": {"origins": "localhost:9000"}}, supports_credentials=True, methods="GET, POST, OPTIONS", allow_headers="Content-type, auth")

我是不是做错了什么?在这里尝试了更多的东西来改变这一点:

代码语言:javascript
复制
app.config['CORS_HEADERS'] = 'Content-Type, auth'
app.config['CORS_RESOURCES'] = {r"/apis/*":{"origins":"http://localhost:9000"}}
app.config['CORS_METHODS'] = "GET,POST,OPTIONS"
app.config['CORS_SUPPORTS_CREDENTIALS'] = True

要这样做:

代码语言:javascript
复制
app.config['CORS_HEADERS'] = ['Content-Type, auth']
app.config['CORS_RESOURCES'] = {r"/apis/*":{"origins":"http://localhost:9000"}}
app.config['CORS_METHODS'] = ["GET,POST,OPTIONS"]
app.config['CORS_SUPPORTS_CREDENTIALS'] = True

但同样的结果是:(

不过,看起来起作用的是使用装饰器,而不是像这样的全局应用程序级别设置:

代码语言:javascript
复制
@cross_origin(supports_credentials=True, methods=["GET, POST, OPTIONS"], headers=["content-type, auth"])
EN

回答 1

Stack Overflow用户

发布于 2018-09-09 14:53:58

在flask-cors的源代码中有一个注释:

“如果源文件中有通配符,则即使'send_wildcard‘为假,也只需发送通配符。除非supports_credentials为True,因为规范禁止这样做。”

它们在这里引用规范:http://www.w3.org/TR/cors/#resource-requests,该规范明确声明“注意:字符串"*”不能用于支持凭据的资源。“

因此,解决方案似乎是不使用通配符来源。

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

https://stackoverflow.com/questions/48058178

复制
相关文章

相似问题

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