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

Django Rest Framework中OPTIONS请求缺失Access-Control-Allow-Origin头问题

Azure APIM 关联API出现CORS问题的排查思路
  • 优先检查APIM层面的CORS策略配置
    确认APIM目标API的入站/出站策略中是否添加了<cors>策略,重点核对:

    • <allowed-origins>是否包含开发者门户的完整域名(比如https://{your-apim-name}.developer.azure-api.net)
    • 若请求带凭据(比如cookie、订阅密钥),需添加<allow-credentials>true</allow-credentials>
    • 检查是否存在<remove-header>策略误删了Access-Control-Allow-Origin响应头
    • 注意:APIM的CORS策略会覆盖后端返回的CORS头,若同时配置了后端和APIM的CORS,以APIM的规则为准
  • 对比两次OPTIONS请求的差异
    把开发者门户触发的预检OPTIONS请求,和你单独发起的OPTIONS请求做全量对比:

    • 核对请求头中的Origin值是否完全一致(开发者门户的Origin可能是APIM开发者门户域名,而你单独请求可能用了本地或其他域名)
    • 检查是否存在额外请求头:比如开发者门户调用时会自动带上Ocp-Apim-Subscription-Key,可能触发后端CORS中间件的额外校验
    • 确认请求路径、查询参数是否完全匹配,避免APIM路由匹配错误导致策略未生效
  • 验证后端应用的CORS配置有效性
    即便配置了ALLOWED_HOSTS和CORS_ALLOWED_ORIGINS,仍需排查:

    • 确认后端CORS中间件(如Django的django-cors-headers、Flask的flask-cors)是否正确启用,且CORS_ALLOWED_ORIGINS包含了APIM的网关域名(比如https://{your-apim-name}.azure-api.net)
    • 检查后端是否对OPTIONS请求做了特殊处理:比如是否存在路由规则拦截了OPTIONS请求,或者中间件顺序错误(CORS中间件需放在路由之前)
    • 若后端返回的CORS头被APIM覆盖,可在APIM策略中添加<set-header name="Access-Control-Allow-Origin" exists-action="override" value="@(context.Request.Headers.GetValueOrDefault("Origin","*"))"/>来动态传递Origin
  • 排查APIM路由与订阅限制

    • 确认开发者门户调用的API路径与APIM中定义的API路径完全匹配,避免因路径不匹配导致CORS策略未触发
    • 检查APIM的产品、订阅是否允许OPTIONS请求:部分安全策略(如IP过滤、订阅密钥校验)可能误拦截OPTIONS请求,导致响应缺失CORS头
  • 清除浏览器缓存或用隐私模式测试
    浏览器会缓存预检OPTIONS请求的响应,若之前的错误响应被缓存,即便配置修复后仍会出现问题。可通过清空浏览器缓存、使用隐私模式,或在请求中添加Cache-Control: no-cache头来验证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:45:15