全部产品
Search
文档中心

函数计算:HTTP触发器概述

更新时间:Feb 11, 2026

通过 HTTP 请求触发函数执行,适用于快速搭建 Web 服务等场景。使用前需了解:触发器与 HTTP/HTTPS的使用限制;同步/异步调用方式;认证鉴权与跨域(CORS)的配置方式。本文介绍上述内容及常见问题。

注意事项

  • 匿名触发器的安全风险:若 HTTP 触发器在配置中将认证方式选为无需认证,则不会验证身份,任何人均可通过 HTTP 请求调用函数,存在 URL 泄露风险。可在业务中校验请求头 Authorization 是否合法以自行鉴权。详见为HTTP触发器配置签名认证

  • APK 下载限制:根据国家网络安全监管要求,自 2024 年 6 月 10 日起,新创建的 HTTP 触发器禁止通过公网地址下载 APK 文件(MIME 类型为 application/vnd.android.package-archive),访问将返回 400。详见 如何确保HTTP触发器公网访问地址正常返回.apk文件

  • VIP 轮换:函数计算为提升系统韧性与服务稳定性实施 VIP(虚拟 IP)轮换,HTTP 触发器提供的公网/内网访问地址对应的 VIP 会不定期轮换。直接硬编码 VIP 可能导致服务中断,建议通过自定义域名访问以保证业务稳定。因不当使用 VIP 导致的故障不在函数计算赔付范围内。

    可通过自定义域名搭配 CNAME 访问,详见配置自定义域名

使用限制

触发器限制

  • 每个版本或别名下最多创建一个 HTTP 类型触发器。详细信息,请参见版本管理别名管理

  • 内置域名仅用于测试,请勿用于线上对外服务,以免受内置域名稳定性影响。

    说明

    对外提供网站类服务需使用已备案的自定义域名,将域名与函数绑定后对外提供服务。更多信息,请参见配置自定义域名

HTTP/HTTPS协议使用限制

说明

支持GET、POST、PUT、DELETE、HEAD、PATCH和OPTIONS方式触发函数,适用于简单的请求-响应场景。更多信息,请参见配置HTTP触发器

  • HTTP Request限制

    • Request Headers不支持以x-fc-开头的自定义字段和以下自定义字段。

      • connection

      • keep-alive

    • 如果Request超过以下限制,会返回400状态码和InvalidArgument错误码。

      • Headers大小:Headers中的所有Key和Value的总大小不得超过8 KB。

      • Path大小:包括所有的Query Params,Path的总大小不得超过4 KB。

      • Body大小:同步调用请求的Body的总大小不得超过32 MB,关于异步调用请求的Body的大小,请以函数运行资源限制为准。

  • HTTP Response限制

    • Response Headers不支持以x-fc-开头的自定义字段和以下自定义字段。

      • connection

      • content-length

      • date

      • keep-alive

      • server

      • upgrade

      • content-disposition:attachment

        说明

        从安全角度考虑,使用函数计算默认的aliyuncs.com域名,服务端会在Response Headers中强制添加content-disposition: attachment字段,此字段会使得返回结果在浏览器中以附件的方式下载。如果要解除该限制,需设置自定义域名。更多信息,请参见配置自定义域名

    • 如果Response超过以下限制,会返回502状态码和BadResponse错误码。

      • Headers大小:Headers中的所有Key和Value的总大小不得超过8 KB。

与API网关的对比与优势

HTTP触发器与API网关触发器均可应用于Web应用的创建。使用方式如下:

  • HTTP触发器:您可以通过绑定自定义域名,为HTTP函数映射不同的HTTP访问路径。详细信息,请参见配置自定义域名

  • API网关触发器:您还可以使用API网关,后端服务类型选择函数计算,实现类似功能。详细信息,请参见使用函数计算作为API后端服务

相较于API网关触发器,HTTP触发器有以下优势。

  • 降低开发人员的学习成本和简化开发人员的调试过程,帮助开发人员快速使用函数计算搭建Web应用和API。

  • 减少请求处理环节,HTTP触发器支持更高效的请求、响应格式,不需要编码或解码成JSON格式,性能更优。

  • 支持选择熟悉的HTTP测试工具验证函数计算侧的功能和性能。

  • 方便对接其他支持Webhook回调的服务,例如CDN回源、轻量消息队列(原 MNS)等。

调用方式

同步调用

同步调用指事件被函数处理后直接返回结果。HTTP触发器默认的函数调用方式为同步调用。更多信息,请参见同步调用

异步调用

异步调用指函数计算收到请求后,将请求持久化保存,然后立即返回响应,而不是等待请求执行完成后,再返回执行结果。

  • 异步调用:使用HTTP触发器调用函数时,您可以通过增加请求头"X-Fc-Invocation-Type":"Async"的方式实现请求级别的异步调用。

  • 异步任务:HTTP函数配置了异步任务后,您可以通过增加请求头"X-Fc-Async-Task-Id":"g6u*****iyvhd3jk8s6bhj0hh"完成异步任务调用Invocation ID的配置。

关于请求头的更多信息,请参见调用函数

异步调用成功后,函数计算会返回状态码202,表示请求接收成功。同时会通过请求头返回Request ID,格式如"X-Fc-Request-Id": "80bf7****281713e1"

说明

如果函数计算返回的状态码是202以外的状态码,则表示调用失败。关于调用失败后错误原因,请参见重试机制

相关文档:

  • 关于异步调用的更多信息,请参见异步调用

  • 关于异步任务的更多信息,请参见异步任务

认证鉴权

函数计算支持对HTTP触发器配置认证鉴权。外部用户通过HTTP触发器访问函数时,必须经过函数计算的认证鉴权之后,才能访问到函数。HTTP触发器支持的鉴权方式如下:

CORS请求处理

函数计算系统默认允许函数的调用请求跨域访问,同时也支持用户在函数代码中自定义函数对跨域(即CORS)请求的处理行为。

简单请求

简单请求不会发送预检请求,您可以直接在函数代码中设置Access-Control-Allow-*开头的Header,完成简单的访问控制。对于简单请求,函数计算支持自定义的Headers包括:Access-Control-Allow-OriginAccess-Control-Allow-HeadersAccess-Control-Max-Age

如果您没有自定义Headers,函数计算的Response Headers会默认设置为Request请求中相应的字段:

  • Access-Control-Allow-Origin:Request请求的Origin Header。

  • Access-Control-Allow-Credentials:默认取值为true

  • Access-Control-Expose-Headers:函数计算自定义的一些Header。

非简单请求

非简单请求在发送正式请求前会发送预检请求,即一次非简单请求包含一次OPTIONS方法的函数调用请求和一次实际的函数调用请求。正式请求的规则与上文的简单请求相同。如果您需要自定义预检请求的返回,则需要为HTTP触发器添加OPTIONS方法,然后在函数代码中处理OPTIONS请求,即设置Access-Control-Allow-*开头的Header以控制函数的跨域行为。

对于预检请求,函数计算支持用户自定义的Headers包括Access-Control-Allow-OriginAccess-Control-Allow-HeadersAccess-Control-Allow-MethodsAccess-Control-Max-Age

以Node.js内置运行时为例,函数代码中处理预检请求的示例如下所示:

exports.handler =  (event, context,callback) => {
      console.log('hello world');
      const method = JSON.parse(event).requestContext.http.method;
      if (method === 'OPTIONS') {
          // 设置响应头以处理预检请求
          const fcResponse = {
            'statusCode': 204,
            'headers': {
              'Access-Control-Allow-Origin': 'http://www.fc.com',
              'Access-Control-Allow-Methods': 'POST',
              'Access-Control-Allow-Headers': 'Content-Type, Authorization',
              'Access-Control-Max-Age':'3600'
            },
            'body': 'hello world'
        };
        callback(null, fcResponse);
      } else {
        callback(null, {
            'statusCode': 500,
            'body': 'hello world'
        });
      }
    };

API Configured CORS

API Configured CORS 当前为邀测功能。如需开通,请联系我们并提供阿里云账号 ID(UID)。

功能说明

API Configured CORS 是函数计算(FC)在网关层提供的能力。可在 HTTP 触发器或自定义域名上直接配置 CORS 策略,无需在函数代码中编写跨域逻辑。

核心优势
  • 代码更简单:跨域逻辑与业务解耦,只需关注业务实现。

  • 成本更低:OPTIONS 预检由网关直接响应,不触发函数实例,节省执行时长费用。

  • 统一管理:在触发器或域名维度配置策略,便于多服务治理。

  • 响应更快:预检结果由网关直接返回,时延更低。

适用范围

  • API 版本:仅适用于 FC 3.0 函数(API 版本:2023-03-30)。

  • 访问方式:HTTP 触发器(含内置测试域名)或已绑定的自定义域名。

配置方式

通过接口更新触发器更新自定义域名进行配置。

CORS 配置参数

参数名称

类型

说明

默认值

限制/约束

allowOrigins

Array

允许访问资源的来源列表(Origin)。

-

最多 100 个,单个长度不超过 256 字符。支持 * 或 https://*

allowMethods

Array

允许的 HTTP 方法列表。

触发器 methods

不支持手动配置 OPTIONS(由网关自动处理)。

allowHeaders

Array

允许浏览器发送的自定义请求头。

-

最多 50 个。支持使用 *

exposeHeaders

Array

允许浏览器获取的响应头字段。

系统默认值

最多 50 个。

allowCredentials

Boolean

是否允许跨域请求携带凭证(如 Cookie)。

false

为 true 时,allowOrigins 不能配置为 *

maxAge

Integer

预检请求(OPTIONS)结果的缓存时长(秒)。

3600

取值范围:0 ~ 86400。

allowOrigins取值

  • 通配符 *:允许所有来源(仅当 allowCredentialsfalse 时)。

  • 通配符 https://*:允许所有以 https:// 开头的来源。

  • 特定域名:如 https://example.com

  • 多个域名:数组形式,如 ["https://example.com", "https://app.example.com"]

  • 不支持子域名通配符(如 https://*.example.com)。

allowMethods取值

  • 标准 HTTP 方法:GETPOSTPUTDELETEPATCHHEAD

  • 通配符 *:表示允许所有 HTTP 方法。

  • 不支持 OPTIONS:OPTIONS 方法由系统自动处理,用于预检请求。

请求处理逻辑

配置 API Configured CORS 后,网关按请求类型处理:

1. 预检请求(OPTIONS)

浏览器发起非简单请求的预检时,网关校验 OriginAccess-Control-Request-MethodAccess-Control-Request-Headers

  • 校验通过:返回 204 No Content 并注入配置的 CORS 响应头,不触发函数。

  • 校验失败

    • Origin 匹配但其他头不匹配:网关设置基础 CORS Header。

    • Origin 不匹配:不设置 CORS Header。

    • 请求会继续转发到函数实例。

2. 简单请求(GET/POST/HEAD 等)

网关仅校验 Origin

  • 校验通过:在响应中注入 Access-Control-Allow-Origin 等 Header,请求转发到函数执行。

  • 校验失败:不注入 CORS Header,请求仍转发到函数执行。

兼容性与优先级

同一路径可能同时存在多种 CORS 处理方式,优先级从高到低:

  1. API Configured CORS:一旦配置,网关优先按此逻辑处理。

  2. 默认 CORS:未开启 API Configured 时,使用内置默认跨域回显。

  3. 函数内 CORS:函数返回的 Header 会与上述结果合并(追加),保证兼容。

方案对比

特性

API Configured CORS(推荐)

默认 CORS

用户自定义 CORS(代码)

预检请求是否计费

不计费(网关拦截)

可能计费

计费(触发函数)

代码入侵性

适用 API 版本

仅 FC 3.0

所有版本

所有版本

配置复杂度

低(一次性配置)

无需配置

高(需处理 OPTIONS 方法)

常见问题 (FAQ)

Q1:为什么我配置了 allowMethods 包含 OPTIONS,但 API 调用报错?

A:根据设计,OPTIONS 方法由函数计算网关自动管理。您无需在 corsConfig 的 allowMethods 中手动添加 OPTIONS,系统会自动处理所有预检请求。

Q2:配置成功后,为什么我的 OPTIONS 请求依然返回 200 而不是 240?

A:请确认您的账号是否已由值班同学开启“邀测权限”。若未完全激活拦截插件,网关会降级到“默认 CORS”逻辑(返回 200 并透传至函数)。

Q3:allowOrigins 可以配置通配符子域名(如 *.example.com)吗?

A:目前不支持子域名模糊匹配。建议在 allowOrigins 数组中枚举所有二级域名,或使用 https://* 进行大范围匹配。

Q4:如果我的函数代码里也写了 CORS Header,会发生冲突吗?

A:不会冲突。网关生成的 Header 与函数返回的 Header 会合并输出。如果存在重复,浏览器通常会以第一个或符合规范的值为准,但这有助于确保旧有业务在平滑迁移时不中断。

常见问题

在哪里可以设置监听端口?

在创建函数时,选择创建Web函数的方式创建函数时,才需要设置监听端口。

函数调用时间太长,要怎么处理?

函数出现499错误,客户端主动取消请求要如何处理?

  • 出现客户端499错误后函数实例会重启,您可以通过配置健康检查避免实例重启,具体原因及操作请参见为什么函数出现客户端499错误后函数实例会重启?

  • 如果客户端调用出现超时情况,您可以将耗时的逻辑放在新的函数中,使用函数的异步调用功能调用新的函数,或者在客户端调用时使用异步调用。

函数处于运行中,如何更新函数配置?

  • 函数执行完成后才会更新函数配置。更新函数配置后,已经在执行中的请求仍然使用原来的配置运行直到执行结束。新发起的调用请求将使用新的函数配置。

  • 删除当前函数,创建新的函数重新配置。