【问题标题】:Strip header on AWS API gatewayAWS API 网关上的剥离标头
【发布时间】:2020-12-13 21:38:41
【问题描述】:

我在 REST API 服务前面有一个 AWS API 网关。当我将请求转发到源时,我想删除一个/一些 HTTP 标头。

我知道如何使用 lambda 来做到这一点,但我只是想知道是否有内置的东西。

【问题讨论】:

    标签: amazon-web-services rest amazon-gateway


    【解决方案1】:

    做类似的事情最简单的事情是强制给定的标题是一个空字符串。

    为此,您可以进入“集成请求”面板(API 网关请求/响应流的第二个块):

    在 Headers 块中,您应该找到所有已定义的标头(如果您在创建 API 资源时定义了它)以及相关映射。如果您希望可以编辑映射,将 method.request.header.headerThatYouWantToRemove 字符串替换为您想要取消设置的标头的 ''(注意两个单引号)。

    如果您希望取消设置的标题不存在,您可以使用“添加标题”链接添加它。

    此时后端端点应该忽略空标头,您就完成了。

    相反,如果您希望完全删除标题,则必须使用映射模板和 Velocity 映射模板,但这可能有风险且容易出错。

    【讨论】:

    • 请注意,我们最近发现这对于空白或覆盖标题并不是一个完美的解决方案。如果客户端发送“格式错误”的标头,使用不同的大小写(例如,OriginoRiGin)将导致两个标头进入后端服务。现在 http 规范说您应该以不区分大小写的方式读取标头,因此您基本上会将 2 个标头发送到后端(或者在您认为要删除标头的情况下,实际上让一个标头通过)。
    • 是的,你是对的。一个选项可以是使用正则表达式验证标头。这样带有oRiGin 标头的请求将被丢弃。
    【解决方案2】:

    使用 VTL 你可以做到这一点。

    #if($paramName == "Authorization") 
          "$paramName" : "" 
        #else
          "$paramName" : "$util.escapeJavaScript($params.get($paramName))"
    #end
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2014-10-16
    • 2010-09-26
    • 2014-12-20
    • 1970-01-01
    • 2023-04-04
    • 2017-07-04
    • 1970-01-01
    • 2017-03-04
    • 2011-04-09
    相关资源
    最近更新 更多