赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 函数计算 FC 3.0
  4. 操作指南
  5. 触发器(云服务集成)
  6. HTTP触发器
  7. HTTP触发器概述

HTTP触发器概述

  • HTTP触发器
  • 发布于 2025-04-16
  • 0 次阅读
文档编辑
文档编辑

HTTP触发器通过发送HTTP请求触发函数执行,主要适用于快速构建Web服务等场景。在使用HTTP触发器前,您需要关注触发器的限制及支持的HTTP/HTTPS协议的限制,防止超过限制而导致函数报错。同时,本文介绍了HTTP触发器调用的方式、认证鉴权方式和跨域请求的使用方式等。

注意事项

  • 如果您的HTTP触发器为匿名触发器,即触发器配置中认证方式选择为无需认证,则无需验证身份,任何人都可以发送HTTP请求调用您的函数,存在URL泄露的风险。此时,您可以设置检查请求消息头部字段Authorization是否合法来进行鉴权验证,避免URL泄露。更多信息,请参见为HTTP触发器配置签名认证。

  • 根据国家网络安全监管要求,阿里云安全团队会对备案在阿里云上的网络域名进行随机抽检访问,这种情况下,您的匿名HTTP网络域名可能会被请求,产生额外的调用记录。

  • 根据国家网络安全监管要求,自2024年06月10日起,新创建的HTTP触发器将禁止通过公网访问地址下载APK文件(MIMETYPE为application/vnd.android.package-archive),APK文件下载访问将直接返回400错误码。更多信息,请参见如何确保HTTP触发器公网访问地址正常返回.apk文件。

  • VIP(虚拟IP地址)轮换机制。

    函数计算服务为了增加系统韧性和服务稳定性,一直以来均实施VIP(虚拟IP地址)轮换机制。这意味着,作为我们基础设施健壮性的一部分,HTTP触发器所提供的公网/内网访问地址所对应的VIP地址将会不定期地进行轮换。

    特别提醒您,直接硬编码VIP地址可能会引发服务中断,强烈建议通过自定义域名方式访问,确保业务的健壮性。注意,因不当使用VIP引发的故障不在函数计算产品赔付范畴内,请您检查并调整为正确使用方式。

    您可以使用自定义域名搭配CNAME来正确访问函数计算。更多信息,请参见配置自定义域名。

使用限制

触发器限制

  • 针对一个版本或一个别名,最多只能创建一个HTTP类型的触发器。详细信息,请参见版本管理和别名管理。

  • HTTP触发器默认提供的内置域名只用来提供测试服务,请不要用于对外的线上服务,避免因内置域名提供服务的稳定性影响您的线上服务。

    说明

    对外提供网站类型服务只能通过已备案域名来实现。即通过配置自定义域名,将域名与函数进行绑定,使用自己的域名对外提供服务。更多信息,请参见配置自定义域名。

HTTP/HTTPS协议使用限制

说明

支持GET、POST、PUT、DELETE、HEAD、PATCH和OPTIONS方式触发函数,适用于简单的请求-响应场景。更多信息,请参见配置HTTP触发器并使用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的总大小不得超过128 KB。

  • 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。

优势

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的配置。

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

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

说明

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

相关文档:

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

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

认证鉴权

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

HTTP触发器目前支持签名认证和JWT认证两种鉴权方式。

使用签名认证方式调用HTTP触发器

客户端在调用HTTP函数的时候,需要先根据事先分配好的AK和SK对请求内容进行计算签名,在发起HTTP请求时,需要将AK和签名信息传输给函数计算进行验证。更多信息,请参见为HTTP触发器配置签名认证。

此认证方式安全强度较高,但是需要您自己在客户端实现签名算法,实现成本较高。并且需要将AK和SK保存在客户端,AK和SK存在泄漏的风险,虽然可以通过阿里云临时安全令牌(STS)来避免这个问题,但是会引入一定的架构复杂性。

使用JWT(JSON Web Tokens)认证方式调用HTTP函数

JWT是一套流行的API授权访问机制,安全强度高,适用于JavaScript或Web前端等安全性较低的客户端场景。更多信息,请参见为HTTP触发器配置JWT认证鉴权。

CORS请求处理

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

简单请求

简单请求不会发送预检请求,您可以直接在函数代码中设置Access-Control-Allow-*开头的Header,完成简单的访问控制。对于简单请求,函数计算支持自定义的Headers包括:Access-Control-Allow-Origin、Access-Control-Allow-Headers、和Access-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-Origin、Access-Control-Allow-Headers、Access-Control-Allow-Methods和Access-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'
        });
      }
    };

常见问题

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

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

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

  • 函数使用频率较低,在首次发起调用时需要等待实例冷启动。

    具体原因可参见为什么使用频率较低的函数调用时间比较长?。如果您希望消除冷启动延时的影响,请参见如何让实例一直存活不销毁,消除冷启动延时的影响?。

  • 如果函数调用偶然出现超时现象,您可以调整执行超时时间,并通过日志查找超时原因,具体解决方案可以参见函数执行超时,报错Function time out after怎么办?。

  • 如果您的函数请求量很大,建议设置实例并发度减少执行时长,具体请参见设置实例并发度。

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

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

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

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

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

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

相关文章

HTTP触发器概述 2025-04-16 14:38

HTTP触发器通过发送HTTP请求触发函数执行,主要适用于快速构建Web服务等场景。在使用HTTP触发器前,您需要关注触发器的限制及支持的HTTP/HTTPS协议的限制,防止超过限制而导致函数报错。同时,本文介绍了HTTP触发器调用的方式、认证鉴权方式和跨域请求的使用方式等。

配置HTTP触发器 2025-04-16 14:38

函数计算支持HTTP触发器,配置HTTP触发器的函数可以通过HTTP请求被触发执行。函数对HTTP请求进行处理,并将处理结果返回给调用端。本文介绍如何在

HTTP触发器调用函数 2025-04-16 14:38

HTTP触发器提供了函数专用的HTTP和HTTPS地址,您可以直接通过HTTP触发器提供的URL调用函数。本文将介绍内置运行时中使用HTTP触发器调用函数的方法。关于自定义运行时HTTP触发器调用函数的相关内容,请参见Web函数。 注意事项 在函数计算3.0版中,自定义运行时和自定义镜像运行环境的H

为HTTP触发器配置JWT认证鉴权 2025-04-16 14:38

在函数计算中,为HTTP触发器配置JWT认证鉴权,可以确保仅持有有效JWT的客户端才能访问函数,从而提升HTTP服务的安全性,有效防止未经授权的访问和阻挡恶意攻击。 背景信息

为HTTP触发器配置签名认证 2025-04-16 14:38

函数计算支持为HTTP触发器配置签名认证,当请求消息到达

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号