Api 网关 304 响应 Last-Modified header
Api gateway 304 responses with Last-Modified header
我想用 Last-Modified header 来响应 304 响应。
起初我使用错误响应来实现。
Handler.js
module.exports.handler = function(event, context, cb) {
const UpdateDate = new Date();
return cb("304 Not Modified", {
"Last-Modified": UpdateDate,
"body":{
"message": {}
}
});
};
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 文档上找到了它。
If an error is provided, callback parameter is ignored.
所以,这是行不通的。
是否有任何解决方案来响应 header 的 304 响应?
已更新:
是否可以 return 错误 object 并在 s-function 中映射响应 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
return cb({
"status" : "304 Not Modified",
"Last-Modified": UpdateDate
), null);
我也试试这个。它可以映射到 304 但 header 无法得到 "integration.response.body.errorMessage.Last-Modified"
return cb(JSON.stringify({
"status" : "304 Not Modified",
"Last-Modified": UpdateDate
}), null);
我尝试 $util.parseJson 但没有处理 responseParameter。
Invalid mapping expression specified:$util.parseJson($input.path('$.errorMessage')).Last-Modified
"responseParameters": {
"method.response.header.Cache-Control": "'public, max-age=86400'",
"method.response.header.Last-Modified": "$util.parseJson($input.path('$.errorMessage')).Last-Modified"
},
要在您的 API 中 return 状态 304,您需要从 Lambda 函数中抛出错误。可以 return 来自 Lambda 函数的错误消息中的 "Last-Modified" 值,并将其路由到 API 响应中的 "Last-Modified" header。
有关详细信息,请查看选项 2 here
谢谢,
瑞安
我想用 Last-Modified header 来响应 304 响应。
起初我使用错误响应来实现。
Handler.js
module.exports.handler = function(event, context, cb) {
const UpdateDate = new Date();
return cb("304 Not Modified", {
"Last-Modified": UpdateDate,
"body":{
"message": {}
}
});
};
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 文档上找到了它。
If an error is provided, callback parameter is ignored.
所以,这是行不通的。
是否有任何解决方案来响应 header 的 304 响应?
已更新:
是否可以 return 错误 object 并在 s-function 中映射响应 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
return cb({
"status" : "304 Not Modified",
"Last-Modified": UpdateDate
), null);
我也试试这个。它可以映射到 304 但 header 无法得到 "integration.response.body.errorMessage.Last-Modified"
return cb(JSON.stringify({
"status" : "304 Not Modified",
"Last-Modified": UpdateDate
}), null);
我尝试 $util.parseJson 但没有处理 responseParameter。
Invalid mapping expression specified:$util.parseJson($input.path('$.errorMessage')).Last-Modified
"responseParameters": {
"method.response.header.Cache-Control": "'public, max-age=86400'",
"method.response.header.Last-Modified": "$util.parseJson($input.path('$.errorMessage')).Last-Modified"
},
要在您的 API 中 return 状态 304,您需要从 Lambda 函数中抛出错误。可以 return 来自 Lambda 函数的错误消息中的 "Last-Modified" 值,并将其路由到 API 响应中的 "Last-Modified" header。
有关详细信息,请查看选项 2 here
谢谢, 瑞安