小程序Severless云函数支持由HTTP请求触发云函数调用的功能,本文介绍如何开启云函数HTTP触发功能。
- 业务安全:开发者需在云函数代码中做好权限控制和安全防护,避免未授权访问触发敏感操作。
- 资源安全:云函数开启了 HTTP 访问后,如果遇到大量恶意访问,消耗云函数资源,开发者可以将云函数的触发路径设置为空或关掉该Space的HTTP触发功能,停止HTTP触发支持。
开启方法
开启云函数HTTP触发功能,您需要开启Space的触发功能且配置云函数的HTTP触发路径。
- 开启Space的HTTP触发功能
调用接口 UpdateHttpTriggerConfig接口来开启Space的HTTP触发功能,注意需要设置EnableService为true。
系统会为开启HTTP触发功能的Space分配一个默认域名
(DefaultEndpoint)
,供HTTP触发使用。 - 开启云函数的HTTP触发功能
调用接口 UpdateFunction接口来为云函数设置HTTP触发路径
HttpTriggerPath
,只有设置了触发路径的云函数才能使用该功能。 - HTTP触发函数执行
访问
https://${DefaultEndpoint}${HttpTriggerPath}
,即可触发对应的云函数执行。
限制说明
- 请求路径必须以
/http
开头,不能以/
结尾,同一个Space下面的云函数的请求路径不能重复,请求路径只支持(/)、(-)、(_)、(.)、字母和数字组合,请求路径最长不超过128个字符。 - 请求方法仅支持以下四种,其余方法会被忽略。
- GET
- POST
- PUT
- DELETE
- 请求时Body的Content-Type仅支持以下三类,允许没有Body的请求,即没有Content-Type。其余Content-Type类型会被拒绝。
- application/json
- application/x-www-form-urlencoded
- text/*
- 通过HTTP触发的响应,都会添加固定的Header,即
Content-Disposition: attachment
,此字段会使得返回结果在浏览器中以附件的方式下载。当前此字段无法覆盖,后续支持使用自定义域名之后,可以避免该问题。 - 请求Body大小限制,不能超过1M。
- 响应Body大小限制,不能超过1M。
云函数入参说明
在云函数中,通过ctx.args
来获取请求时的内容。各参数的详细解释如下:
{
path: 'HTTP请求路径,如 /hello',
httpMethod: 'HTTP请求方法,如 GET',
headers: {HTTP请求头,键值对形式},
queryStringParameters: {HTTP请求的Query,键值对形式},
body: 'HTTP请求体',
isBase64Encoded: 'true or false,表示body是否为Base64编码,当前只会有false'
}
云函数返回值说明
云函数返回时,可以返回string、object、number、boolean等类型的数据,或者返回自定义响应,随后小程序Serverless会将返回值转化为正常的HTTP响应。
- 返回string
当服务端返回的Content-Type是text/plain。
例如云函数返回:'hello world!'
则最终的响应为:HTTP/2 200 date: Mon, 23 Mar 2020 10:12:41 GMT content-type: text/plain content-length: 12 content-disposition: attachment request-id: ac14000d1584958361033101870 hello world!
- 返回object、number或boolean
当服务端返回的Content-Type是application/json。
例如云函数返回:{ "keyString": "value1", "keyNumber": 1234 }
则最终的响应为:HTTP/1.1 200 OK Date: Mon, 23 Mar 2020 10:18:48 GMT Content-Type: application/json; charset=utf-8 Content-Length: 39 request-id: ac14000d1584958728277106170 content-disposition: attachment {"keyString":"value1","keyNumber":1234}
- 返回自定义响应
服务端返回的Content-Type,HttpStatusCode,Headers都由云函数来指定。
要求云函数返回一个object,同时要设定mpserverlessComposedResponse为true。
云函数的返回格式如下:{ "mpserverlessComposedResponse": true, "isBase64Encoded": true|false, "statusCode": httpStatusCode, "headers": { "headerName": "headerValue", ... }, "body": "..." }
例如云函数返回:{ mpserverlessComposedResponse: true, isBase64Encoded : false, statusCode: 200, headers: { 'content-type': 'text/html' }, body: '<h1>Hello World</h1>' }
则最终的响应为:HTTP/2 200 date: Mon, 23 Mar 2020 10:40:09 GMT content-type: text/html; charset=utf-8 content-length: 20 request-id: ac14000d1584960009970137070 content-disposition: attachment <h1>Hello World</h1>
在文档使用中是否遇到以下问题
更多建议
匿名提交