本文介绍Custom Container HTTP函数的背景信息、函数判断、调用说明、示例及使用限制。

背景信息

函数计算系统会将用户的请求,包括Method、Path、Body、Query及Headers和函数计算系统生成的Common Headers转发给HTTP Server。您可以平滑迁移已有的HTTP Web应用。更详细的介绍,请参见简介

函数判断

对于Custom Container Runtime,您可以根据Headers中的x-fc-control-path来判断HTTP函数调用和事件函数调用。

说明 通常情况下,您无需关注x-fc-control-path字段。
  • /invoke:该请求为事件函数调用。/invoke表示是Invoke函数调用请求。
  • /initialize/initialize表示第一次创建执行环境时,函数计算系统自动发起的Initialize函数调用请求。在容器的生命周期内,有且仅成功调用一次,类似于Class构造函数。
  • /http-invoke:该请求为HTTP函数调用。/http-invoke表示是一个HTTP Invoke函数调用请求。函数计算会将您的请求(包括Method、Path、Body、Query及Headers)加上Common Headers后转发给Custom Container Runtime,Custom Container Runtime返回的响应头和响应体则会被返回给客户端。

函数调用说明

当HTTP函数被调用时,和调用一个Web API方式一样,您可以直接使用cURL、Postman或浏览器等方式直接请求调用。当通过浏览器访问HTTP触发器时对应的函数被强制下载的解决方案,请参见解决方法

注意 如果创建的函数不设置Initializer,就无需实现/initialize。当不设置时,即使HTTP Server实现了/initialize,代码中的/initialize逻辑也无法被调用执行。
Path 输入请求 期望的响应
(可选)POST /initialize

请求体:无。

请求头:Common Request Headers。具体信息,请参见函数计算公共请求头

响应体:函数Initializer的返回值。
StatusCode
  • 200:成功状态。
  • 404:失败状态。
Header 描述
(可选)x-fc-base-path 当您尚未配置自定义域名时,x-fc-base-path的值是/2016-08-15/proxy/${servicename}/${functionname}/
(可选)x-fc-status 当您的HTTP函数不是应用一键迁移,而是单纯新开发的Web API时,其性质和事件函数类似。您可以通过x-fc-status向函数计算系统汇报本次HTTP函数执行是否成功。详细信息,请参见事件函数

使用限制

  • 函数设置HTTP触发器后不能再设置其他类型的触发器。
  • 每个函数只能创建一个HTTP触发器。
  • 若您使用了版本管理功能,每个函数对应的版本或别名只能创建一个HTTP触发器。即一个函数的一个版本或一个别名对应可以创建一个HTTP触发器。版本和别名的详细信息,请参见版本简介
  • Request Headers不支持以x-fc-开头的自定义及以下字段的自定义:
    • accept-encoding
    • connection
    • keep-alive
    • proxy-authorization
    • te
    • trailer
    • transfer-encoding
  • Response Headers不支持以x-fc-开头的自定义及以下字段的自定义:
    • connection
    • content-length
    • content-encoding
    • date
    • keep-alive
    • proxy-authenticate
    • server
    • trailer
    • transfer-encoding
    • upgrade
    • content-disposition:attachment
      说明 从安全角度考虑,使用函数计算默认的aliyuncs.com域名,服务端会在Response Headers中强制添加content-disposition: attachment字段,此字段会使得返回结果在浏览器中以附件的方式下载。如果要移除该限制,需设置自定义域名。详细信息,请参见绑定自定义域名
  • Request限制项。

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

    • Headers大小:Headers中的所有Key和Value的总大小不得超过4 KB。
    • Path大小:包括所有的Query Params,Path的总大小不得超过4 KB。
    • Body大小:HTTP Body的总大小不得超过6 MB。
  • Response限制项。

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

    • Headers大小:Headers中的所有Key和Value的总大小不得超过4 KB。
  • 其他使用说明。

    您可以通过绑定自定义域名为HTTP函数映射不同的HTTP访问路径。详细信息,请参见绑定自定义域名。您还可以使用API网关,后端服务类型选择HTTP服务,设置HTTP函数为后端服务地址,实现类似功能。详细信息,请参见使用函数计算作为API网关后端服务

代码示例

在以下Node.js Express示例中,GET和POST方法分别路由至不同的Handler。您也可以根据需要做任意的Path和Handler映射。

'use strict';

const express = require('express');

// Constants
const PORT = 9000;
const HOST = '0.0.0.0';

// HTTP function get
const app = express();
app.get('/*', (req, res) => {
  res.send('Hello FunctionCompute, http GET');
});

app.post('/*', (req, res) => {
  res.send('Hello FunctionCompute, http POST');
});

app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);