开发者社区 > 云原生 > Serverless > 正文

请问 FC 的HTTP触发器,会自动过滤 setCookie 吗?要保留如何设置呢?

请问 FC 的HTTP触发器,会自动过滤 setCookie 吗?要保留如何设置呢?

展开
收起
飘飘斯嘉丽 2023-06-26 14:16:33 101 0
8 条回答
写回答
取消 提交回答
  • 随心分享,欢迎友善交流讨论:)

    在函数计算的 HTTP 触发器中,不会自动过滤 Set-Cookie 响应头。您可以在函数中自行设置 Set-Cookie 响应头,以实现自定义的 Cookie 管理和实现更丰富的业务功能。

    以下是一个示例的 Node.js 函数代码,用于在 HTTP 响应中设置 Set-Cookie 响应头:

    exports.handler = function(event, context, callback) { const response = { statusCode: 200, headers: { 'Set-Cookie': 'name=value; Path=/; HttpOnly', 'Content-Type': 'text/html', }, body: 'Hello, world! ', };

    callback(null, response); }; 在这个示例中,我们首先定义了一个名为 response 的响应对象,其中包含了一个 Set-Cookie 响应头和一个文本响应体。我们可以在 Set-Cookie 响应头中设置一个名为 name、值为 value 的 Cookie,并指定了其路径和是否为 HttpOnly。之后,我们将该响应对象作为回调函数的一个参数,返回给调用方即可。

    需要注意的是,您在设置 Set-Cookie 响应头时,需要遵循标准的 Cookie 格式和安全规范,以确保数据的安全和可靠性。此外,您还可以使用 Cookie 解析器等工具,对 Cookie 进行更加灵活和高效的管理和处理。

    2023-06-30 16:18:10
    赞同 展开评论 打赏
  • 在阿里云函数计算(Function Compute)的 HTTP 触发器中,默认情况下会自动过滤掉响应中的 Set-Cookie 头部,即不会将该头部返回给调用方。这是因为函数计算是基于事件驱动的无状态计算服务,不提供会话管理和状态维护的机制,所以 Cookie 在大多数情况下是没有意义的。

    如果你需要保留 Set-Cookie 头部并将其返回给调用方,可以通过设置 Access-Control-Expose-Headers 头部来实现。

    以下是一个示例,展示了如何在 Node.js 的函数计算中设置 Set-Cookie 头部并返回给调用方:

    exports.handler = function(event, context, callback) {
      // 设置响应头部,包括 Set-Cookie 头部
      const response = {
        statusCode: 200,
        headers: {
          'Access-Control-Expose-Headers': 'Set-Cookie',
          'Set-Cookie': 'cookie_name=cookie_value'
        },
        body: 'Response body'
      };
    
      callback(null, response);
    };
    

    在上述示例中,我们在响应头部中设置了 Access-Control-Expose-Headers: Set-Cookie,以便将 Set-Cookie 头部暴露给调用方。同时,在 headers 属性中设置了 Set-Cookie 头部的具体值。

    这样,当调用该函数时,返回的响应中就会包含 Set-Cookie 头部,并将其返回给调用方。

    由于函数计算是无状态的,所以在下一次请求中,调用方发送过来的 Cookie 不会自动传递给函数。如果你需要在函数计算中处理 Cookie 相关逻辑,可以通过将 Cookie 写入响应的方式,让调用方再次发送带有 Cookie 的请求。

    2023-06-27 10:23:42
    赞同 展开评论 打赏
  • 不会自动过滤 setCookie。当使用HTTP触发器触发函数计算时,如果函数计算返回的HTTP响应头中包含setCookie字段,那么该响应头中的setCookie字段会被返回给调用方

    2023-06-27 08:59:16
    赞同 展开评论 打赏
  • 在云函数(Function Compute)的HTTP触发器中,它本身并不会自动过滤setCookie。当您在处理HTTP请求时,您可以自由地设置和返回setCookie头部信息。

    要在HTTP触发器中保留设置setCookie,您需要在您的函数代码中显式地设置响应头部信息。以下是使用Node.js的示例代码:

    exports.handler = function (request, response, context) { // 设置自定义的Cookie response.setHeader('Set-Cookie', 'cookie_name=cookie_value; Max-Age=3600; Path=/;');

    // 其他处理逻辑...

    // 返回响应 response.send('Response body'); };

    在这个示例中,response.setHeader('Set-Cookie', ...)语句用于设置setCookie头部信息。您可以根据需要设置您自己的Cookie名称、值以及其他相关属性。

    请注意,不同的编程语言和框架可能有不同的方法来设置HTTP头部信息。上述示例是针对Node.js的示例,如果您使用其他语言或框架,请参考相应的文档以了解如何设置HTTP头部信息。

    总之,云函数的HTTP触发器不会自动过滤setCookie,您可以在函数代码中显式地设置响应头部信息来保留并设置setCookie

    2023-06-26 23:31:11
    赞同 展开评论 打赏
  • 不会的 https://help.aliyun.com/document_detail/71229.html?spm=a2c4g.74769.0.0.5b673a77M3lyh2#p-m72-etl-83j 限制只有这两个header

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-06-26 18:37:00
    赞同 展开评论 打赏
  • 在阿里云函数计算(Function Compute)服务中,如果您使用 HTTP 触发器来触发函数,则请求参数将会由函数计算服务自动处理和转换。具体来说,当接收到请求时,函数计算服务会将请求头、请求体等信息进行解析,并将其转化为函数代码中的事件对象(Event Object),从而实现函数的业务逻辑。

    默认情况下,函数计算服务会自动过滤掉一些请求头中的敏感信息,例如 Cookie、Authorization 等信息,以保障函数计算服务的安全性和稳定性。因此,如果您的请求头中包含了 setCookie 字段,函数计算服务可能会自动忽略该字段,而不进行传递和处理。

    如果您需要在函数中获取 setCookie 字段或其他被过滤掉的请求头信息,可以使用自定义网关触发器(Custom Gateway Trigger)来替代 HTTP 触发器。自定义网关触发器可以让您更加灵活地控制请求和响应,以满足您的特定需求。同时,自定义网关触发器还支持对请求进行认证、鉴权、流量控制等操作,增强函数计算服务的安全性和可用性。

    需要注意的是,在使用自定义网关触发器时,您需要自己编写相应的网关代码,并按照规范进行部署和配置。同时,建议您在设计和实现自定义触发器时,考虑到安全、性能、可维护性等因素,以确保函数计算服务的稳定、高效和安全运行。

    2023-06-26 17:56:54
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在阿里云函数计算服务中,HTTP 触发器会自动过滤掉 HTTP 响应头中的 setCookie 字段,并禁止您手动设置该字段。这是为了保障函数计算服务的安全性和稳定性,在防止恶意程序或攻击者通过 setCookie 字段进行非法访问或攻击。

    如果您需要在函数返回结果中设置 Cookie 信息,可以使用其他方式,例如在响应体中返回 JSON 数据,并在其中包含 Cookie 信息。具体地,您可以将 Cookie 数据封装成 JSON 对象,并将其作为函数处理结果返回给客户端,例如:

    {
      "code": 200,
      "message": "操作成功",
      "data": {
        "userId": 123456,
        "userName": "John",
        "token": "abcde12345"
      },
      "cookies": [
        "userId=123456; expires=Wed, 21-Oct-2026 07:28:00 GMT; path=/; domain=.example.com",
        "userName=John; expires=Wed, 21-Oct-2026 07:28:00 GMT; path=/; domain=.example.com",
        "token=abcde12345; HttpOnly; Secure; SameSite=None; expires=Wed, 21-Oct-2026 07:28:00 GMT; path=/; domain=.example.com"
      ]
    }
    

    在上述示例中,您可以看到一个包含 Cookies 数组的 JSON 对象,其中每个元素表示一个 Cookie 项,并包含 Cookie 名称、值、过期时间等相关信息。然后,客户端可以从响应体中解析出 Cookie 数据,并将其保存到本地浏览器中,以便下一次访问时自动发送 Cookie 信息。

    需要注意的是,在使用函数计算服务时,您需要遵守平台的相关规定和安全策略,保障函数代码和数据的安全性和合规性。如果您遇到任何问题或疑问,建议您咨询阿里云的技术支持团队,获得更好的指导和帮助。

    2023-06-26 17:40:08
    赞同 展开评论 打赏
  • FC的HTTP触发器不会自动过滤setCookie,如果您使用FC的HTTP触发器,可以在函数代码中设置返回的HTTP响应头,包括setCookie。

    如果您需要保留setCookie,可以在函数代码中设置返回的HTTP响应头,例如:

    headers = {
        'Content-Type': 'text/html',
        'Set-Cookie': 'name=value; expires=Wed, 21 Oct 2023 07:28:00 GMT; path=/',
    }
    return {
        'statusCode': 200,
        'headers': headers,
        'body': 'Hello, World!'
    }
    

    在上面的示例中,我们在响应头中设置了一个Set-Cookie的值,这个值将被返回给客户端,客户端将存储这个cookie。如果您需要设置多个cookie,可以在Set-Cookie中设置多个cookie,以分号分隔。

    2023-06-26 15:08:38
    赞同 展开评论 打赏
滑动查看更多

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

    更多
    Hologres Serverless之路:揭秘弹性计算组 立即下载
    Serverless开发平台: 让研发效能再提升 立即下载
    Serverless 引领云上研发新范式 立即下载