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

