You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask+TypeScript下POST请求无尾部斜杠时的CORS问题

解决Flask + TypeScript开发中的CORS斜杠路由问题

核心解决方案:关闭Flask的严格斜杠匹配规则

直接在你的产品蓝图定义时添加strict_slashes=False,这样带斜杠和不带斜杠的请求都会匹配到同一个路由,避免Flask自动触发301重定向:

# app/products/__init__.py
bp_products = Blueprint('products', __name__, url_prefix='/products', strict_slashes=False)

# 现在只需要保留一个路由定义即可,两种路径都会匹配
@bp_products.route('', methods=['POST', 'OPTIONS'], endpoint='add')
@json_response
def add():
    if request.json is None:
        abort(400, 'Request must be json')

    # 你的业务逻辑

    return product_schema.dump(product)

问题根源分析

你遇到的现象是因为Flask默认开启了严格斜杠匹配:当请求不带尾部斜杠的路由时,Flask会返回301重定向到带斜杠的版本。此时浏览器会先发起OPTIONS预请求(CORS要求),但重定向后的OPTIONS请求可能因为CORS头配置不完整被浏览器拦截——而Postman会自动跟随重定向且不严格校验CORS,所以测试正常。

额外优化建议

如果全局CORS配置没覆盖到蓝图的重定向场景,可以针对蓝图单独配置CORS:

# app/__init__.py
from flask_cors import CORS
from .products import bp_products

# 全局CORS保留的同时,给蓝图单独配置
CORS(app)
CORS(bp_products)

app.register_blueprint(bp_products)

这样调整后,前端不管用带斜杠还是不带斜杠的请求路径,都能正常通过CORS校验。

内容的提问来源于stack exchange,提问作者Mindastic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:32:42