HTTP请求处理程序(HTTP Handler)

您可以使用HTTP请求处理程序更方便地处理HTTP请求。当调用函数时,函数计算使用您提供的执行方法来处理HTTP请求。本文介绍Node.js HTTP请求处理程序的结构特点和使用示例等。

HTTP Handler签名

Node.js的HTTP Handler的签名如下。您只需实现一个函数,就能响应HTTP请求。

exports.handler = (req, resp, context) => {
    console.log("receive body: ", req.body.toString());
    resp.setHeader("Content-Type", "text/plain");
    resp.send('<h1>Hello, world!</h1>');
}     

示例解析如下:

  • handler:HTTP Handler名称。

  • req:HTTP请求结构体。

  • resp:HTTP返回结构体。

  • context:上下文信息。具体信息,请参见上下文

HTTP请求结构体

字段

类型

描述

headers

Object

存放来自HTTP客户端的键值对。

path

String

表示HTTP路径。

queries

Object

存放来自HTTP路径中的查询部分的键值对,值的类型可以为字符串或数组。

method

String

表示HTTP方法。

clientIP

String

客户端的IP地址。

url

String

请求的地址。

说明

Headers键值对中的key中包含以下字段或以x-fc-开头的key均会被忽略,因此,不支持自定义。

  • connection

  • keep-alive

HTTP响应结构体

方法

类型

描述

response.setStatusCode(statusCode)

interger

设置状态码。

response.setHeader(headerKey, headerValue)

String,String

设置响应头。

response.deleteHeader(headerKey)

String

删除响应头。

response.send(body)

Buffer,String,Stream.Readable

发送响应体。

重要

headerKey中包含以下字段或以x-fc-开头的headerKey均会被忽略,因此,不支持自定义。

  • connection

  • content-length

  • date

  • keep-alive

  • server

  • upgrade

限制说明

  • 请求限制

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

    字段

    限制说明

    HTTP状态码

    错误码

    headers

    请求头中的所有键和值的总大小不能超过8 KB。

    400

    InvalidArgument

    path

    请求路径以及所有查询参数的总大小不能超过4 KB。

    body

    同步调用请求的Body的总大小不能超过32 MB,异步调用请求的Body的总大小不能超过128 KB。

  • 响应限制

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

    字段

    限制说明

    HTTP状态码

    错误码

    headers

    响应头中的所有键和值对的大小不能超过8 KB。

    502

    BadResponse

示例:获取HTTP请求详细信息并返回Body

示例代码

module.exports.handler = function (request, response, context) {
    // get request header
    var reqHeader = request.headers
    var headerStr = ' '
    for (var key in reqHeader) {
        headerStr += key + ':' + reqHeader[key] + '  '
    };

    // get request info
    var url = request.url
    var path = request.path
    var queries = request.queries
    var queryStr = ''
    for (var param in queries) {
        queryStr += param + "=" + queries[param] + '  '
    };
    var method = request.method
    var clientIP = request.clientIP
    var body = request.body
    var respBody = new Buffer('requestHeader:' + headerStr + '\n' + 'url: ' + url + '\n' + 'path: ' + path + '\n' + 'queries: ' + queryStr + '\n' + 'method: ' + method + '\n' + 'clientIP: ' + clientIP + '\n' + 'body: ' + body + '\n')
    response.setStatusCode(200)
    response.setHeader('content-type', 'application/json')
    response.send(respBody)
};

前提条件

创建服务

操作步骤

  1. 登录函数计算控制台,在左侧导航栏,单击服务及函数
  2. 在顶部菜单栏,选择地域,然后在服务列表页面,单击目标服务。
  3. 函数管理页面,单击创建函数

    创建运行环境为Node.js 14.x的HTTP函数。具体操作步骤,请参见创建函数

  4. 函数详情页面,单击函数代码页签,在代码编辑器中输入上述示例代码,然后单击部署代码

    说明

    上述示例代码中函数的请求处理程序是index.js中的handler方法。如果您的函数配置的请求处理程序不同,请获取对应的文件和方法进行更新。具体信息,请参见函数实例生命周期回调方法

  5. 函数代码页签,单击测试函数右侧的down图标,从下拉列表中选择配置测试参数

  6. 配置测试参数面板,选择创建新测试请求编辑已有测试请求,配置以下参数,然后单击确定

    • 请求名称:输入自定义请求名称。

    • 请求方式:选择POST

    • 请求路径:输入?foo=bar

    • 请求 Body:在代码框中输入hello,fc

  7. 单击测试函数

    函数执行成功后,您可以看到返回结果中包含的客户端IP地址等信息。