Aws lambda Api网关304响应与上次修改的标头

Aws lambda Api网关304响应与上次修改的标头,aws-lambda,aws-api-gateway,serverless-framework,Aws Lambda,Aws Api Gateway,Serverless Framework,我想用最后修改的头响应304响应 首先,我使用错误响应来实现 Handler.js module.exports.handler = function(event, context, cb) { const UpdateDate = new Date(); return cb("304 Not Modified", { "Last-Modified": UpdateDate, "body":{ "message": {} } }); }; ret

我想用最后修改的头响应304响应

首先,我使用错误响应来实现

Handler.js

module.exports.handler = function(event, context, cb) {
  const UpdateDate = new Date();
  return cb("304 Not Modified", {
    "Last-Modified": UpdateDate,
    "body":{
      "message": {}
    }
  });
};
return cb({
  "status" : "304 Not Modified",
  "Last-Modified": UpdateDate
), null);
端点中的s-function.json

"responses": {
    "304 Not Modified.*": {
      "statusCode": "304",
      "responseParameters": {
        "method.response.header.Last-Modified": "integration.response.body.Last-Modified"
      },
      "responseModels": {
        "application/json;charset=UTF-8": "Empty"
      },
      "responseTemplates": {
        "application/json;charset=UTF-8": "$input.json('$.body')"
      }
    },
    "default": {
      "statusCode": "200",
      "responseParameters": {
        "method.response.header.Cache-Control": "'public, max-age=86400'",
        "method.response.header.Last-Modified": "integration.response.body.Last-Modified"
      },
      "responseModels": {
        "application/json;charset=UTF-8": "Empty"
      },
      "responseTemplates": {
        "application/json;charset=UTF-8": "$input.json('$.body')"

      }
    }
}
但是,我在Lambda doc上找到了

如果提供了错误,则将忽略回调参数

所以,这不起作用

是否有任何解决方案来响应带有标题的304响应

更新:

是否可以在s函数中返回错误对象并映射响应304?下面的代码无法映射到304

s-funtion.json

"responses": {
    ".*304 Not Modified.*": {
      "statusCode": "304",
      "responseParameters": {
        "method.response.header.Cache-Control": "'public, max-age=86400'",
        "method.response.header.Last-Modified": "integration.response.body.errorMessage.Last-Modified"
      }
}
Handler.js

module.exports.handler = function(event, context, cb) {
  const UpdateDate = new Date();
  return cb("304 Not Modified", {
    "Last-Modified": UpdateDate,
    "body":{
      "message": {}
    }
  });
};
return cb({
  "status" : "304 Not Modified",
  "Last-Modified": UpdateDate
), null);
我也试过这个。它可以映射到304,但标题无法获取“integration.response.body.errorMessage.Last Modified”

我尝试使用$util.parseJson,但不使用responseParameter

指定的映射表达式无效:$util.parseJson($input.path('$.errorMessage'))。上次修改

return cb(JSON.stringify({
  "status" : "304 Not Modified",
  "Last-Modified": UpdateDate
}), null);

要在API中返回状态304,需要从Lambda函数中抛出一个错误。可以从Lambda函数返回错误消息中的“Last Modified”值,并将其路由到API响应中的“Last Modified”头

有关详细信息,请参阅选项2

谢谢,
Ryan

请查看选项2中Ryan的链接。您的更新实际上没有返回错误。@BobKinney它返回了一个错误。在cloudWatch日志中:{“errorMessage”:“{\”状态\“:\”304未修改\“,\”上次修改\“:\”2016-07-22T01:58:10.857Z \“}”侧注,根据W3,304不应返回响应主体。请参考您的第一个示例。谢谢,最后我只在响应中输入304状态代码和空正文来实现缓存控制。并在200响应中设置最后修改的报头。