使用flask-cors时OPTIONS请求未返回Access-Control-Allow-Headers与Access-Control-Max-Age响应头问题求助
解决Flask-CORS中OPTIONS请求缺少Access-Control-Allow-Headers和Access-Control-Max-Age响应头的问题
我来帮你排查这个问题,从你的代码和配置来看,主要有几个可能的原因和对应的解决方法:
1. 修正max_age的参数类型
你当前配置里的max_age用了字符串"3600",但Flask-CORS要求这个参数是整数类型。字符串值会导致框架无法正确解析,从而不会返回Access-Control-Max-Age响应头。
2. 确保资源路径匹配正确
虽然你的路由/app/compute看起来和resources={r"/app/*"}匹配,但可以确认一下请求的实际路径是否完全符合(比如有没有额外的斜杠或大小写问题)。如果不确定,可以先尝试全局配置来排除路径匹配的问题。
3. 升级Flask-CORS版本
你使用的Flask-Cors==3.0.10是比较旧的版本,可能存在一些已知的配置解析bug。升级到最新稳定版(比如4.0.0)可能会解决这类兼容性问题。
修改后的代码示例
from flask import Flask, Response, request import json from flask_cors import CORS from waitress import serve app = Flask(__name__) # 修正max_age为整数,同时确保配置参数正确 CORS(app, resources={r"/app/*": { "origins": "http://localhost:3000", "allow_headers": ["Origin", "Authorization", "X-Frame-Options", "X-Requested-With", "DNT", "User-Agent", "If-Modified-Since", "Cache-Control", "Range", "X-Real-IP", "HOST", "X-NginX-Proxy", "Content-Type", "If-Match"], "expose_headers": ["ETag", "Content-Length", "Content-Range", "Access-Control-Allow-Origin"], "max_age": 3600, # 改为整数 "supports_credentials": True # 可选,若前端需要携带cookie等凭证则开启 }}) @app.route('/app/compute', methods=['GET', 'POST', 'PUT']) def compute(): input = request.json responsedict = dict() responsedict['customerid'] = 'customer A' responsedict['loan_amount'] = 0 return Response(json.dumps(responsedict), status=200, mimetype="application/json") serve(app, port=5000, host="0.0.0.0")
升级依赖的requirements.txt
Flask==2.0.2 Flask-Cors==4.0.0 # 升级到最新稳定版 waitress==2.1.1
验证方法
用curl发送OPTIONS请求来测试响应头:
curl -X OPTIONS http://localhost:5000/app/compute \ -H "Origin: http://localhost:3000" \ -H "Access-Control-Request-Headers: Authorization, Content-Type" \ -v
查看响应头中是否包含Access-Control-Allow-Headers和Access-Control-Max-Age,如果出现就说明配置生效了。
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

