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

如何在DigitalOcean App Platform禁用CORS策略允许任意地址访问

DigitalOcean App Platform Python应用CORS拦截解决方案

核心原因说明

Postman 不会执行浏览器同源策略校验,也不会自动发起OPTIONS预检请求,因此可以正常请求。你遇到的Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.报错,是浏览器发起的OPTIONS预检请求未拿到合法响应头导致的,即使在DO平台配置了CORS也未生效,通常是配置遗漏或优先级问题导致。


排查&解决步骤

  • 核对DigitalOcean CORS配置规则
    1. 源地址必须带协议头,本地测试需要填写完整的http://localhost:端口号,不能仅填localhost;非80/443端口的线上域名也需要补充端口号。测试阶段可以先填*验证配置是否生效,排除源匹配问题。
    2. 必须在允许的HTTP方法列表中添加OPTIONS方法,遗漏该方法会导致平台直接拦截预检请求,不会返回CORS相关响应头。
    3. 允许的请求头需要覆盖你用到的自定义头,比如Authorization、Content-Type等常用头都需要加入列表。
      你的现有配置参考:
      配置示意图
  • 补充Python应用侧CORS配置
    DigitalOcean的CORS配置在边缘层生效,如果Python应用本身拦截了OPTIONS请求,或者未透传响应头,平台配置也会失效。建议直接用对应框架的CORS中间件做兜底配置,以Flask为例:
    1. 安装依赖:pip install flask-cors
    2. 配置示例:
    from flask import Flask
    from flask_cors import CORS
    
    app = Flask(__name__)
    # 上线后替换为你的实际域名列表
    CORS(app, origins=["https://你的自有站点域名", "http://localhost:你的本地端口"], supports_credentials=True)
    
    1. 单独处理OPTIONS请求,所有OPTIONS请求直接返回200状态码,不要走业务逻辑校验。
  • 验证配置是否生效
    用curl模拟预检请求,查看返回头是否包含正确的CORS字段:
    curl -X OPTIONS -H "Origin: 你发起请求的域名" -H "Access-Control-Request-Method: GET" 你的API接口地址 -I
    
    如果返回头中存在Access-Control-Allow-Origin字段且值和你的源一致,说明配置已经生效,浏览器不再拦截请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:39:03