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

求助:DigitalOcean Functions设置CORS Headers后预检请求失败

DigitalOcean Functions CORS配置问题解决思路

问题背景

仅能在函数响应中设置CORS头,外部网站通过带Basic Authorization认证的POST请求调用函数时,响应头不生效,所有预检请求均失败,仅GET请求可正常工作。当前响应代码如下:

return {
    statusCode: 200,
    headers: {
       "Access-Control-Allow-Headers" : "Content-Type, Authorization",
       "Access-Control-Allow-Credentials" : true,
       "Access-Control-Allow-Methods": "OPTIONS,POST,GET",
       "Access-Control-Allow-Origin": "*"
    },
    body: "Completed"
};

核心原因

带自定义头(如Authorization)的POST请求属于非简单请求,浏览器会自动发起OPTIONS预检请求。而DigitalOcean Functions默认不会将OPTIONS请求转发到你的函数代码,导致你设置的CORS头无法返回,预检失败。另外,Access-Control-Allow-Credentials: true与Access-Control-Allow-Origin: "*"存在冲突,这是浏览器的安全限制,会直接导致CORS验证失败。

解决步骤

  1. 显式处理OPTIONS预检请求
    在函数代码开头先判断请求方法,针对OPTIONS请求直接返回CORS头:

    // 处理OPTIONS预检请求
    if (event.http.method === 'OPTIONS') {
        return {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Headers": "Content-Type, Authorization",
                "Access-Control-Allow-Credentials": true,
                "Access-Control-Allow-Methods": "OPTIONS,POST,GET",
                "Access-Control-Allow-Origin": "https://your-external-domain.com" // 替换为实际请求域名
            },
            body: ""
        };
    }
    
    // 处理POST/GET业务逻辑
    return {
        statusCode: 200,
        headers: {
            "Access-Control-Allow-Headers": "Content-Type, Authorization",
            "Access-Control-Allow-Credentials": true,
            "Access-Control-Allow-Methods": "OPTIONS,POST,GET",
            "Access-Control-Allow-Origin": "https://your-external-domain.com" // 替换为实际请求域名
        },
        body: "Completed"
    };
    
  2. 修正Credentials与Origin的冲突
    当启用Access-Control-Allow-Credentials: true时,必须将Access-Control-Allow-Origin设置为具体的请求域名,不能使用通配符*,否则浏览器会拒绝接受响应。

补充说明

DigitalOcean Functions目前不支持全局配置CORS,所有CORS相关的头必须在函数内部处理。GET请求属于简单请求,无需预检,所以能正常工作;而带自定义头的POST请求需要通过OPTIONS预检验证,因此必须显式处理OPTIONS请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:34:54