AWS API网关代理响应失败/已丢弃
问题: 当使用Postman时,AWS API网关代理不会从我的后端服务传回响应,而是在curl上工作 说明: 我想通过AWS API网关公开一个后端服务。在本例中,网关的使用纯粹是作为HTTP代理。所以AWS API网关代理响应失败/已丢弃,api,amazon-web-services,curl,proxy,aws-api-gateway,Api,Amazon Web Services,Curl,Proxy,Aws Api Gateway,问题: 当使用Postman时,AWS API网关代理不会从我的后端服务传回响应,而是在curl上工作 说明: 我想通过AWS API网关公开一个后端服务。在本例中,网关的使用纯粹是作为HTTP代理。所以 创建了一个新的API 使用任何 提供了我的后端服务地址 部署它(不需要身份验证,但需要API密钥) 无法从部署阶段url成功调用我的后端服务 使用CA证书创建自定义域 在我的DNS提供商上创建了一个别名 1小时后,域启动并指向cloudfront工作 问题 我打电话到自定义域 API网关收到了
curl
尝试此操作,我会得到后端发送的预期响应。因此,不清楚的部分是—
Accept
和Content-Type
中传递自定义值Accept:application/json-v1
失败,但Accept:application/xml-v1
正在工作
我认为这与价值有关,因为API网关不喜欢它
我已经彻底阅读了这些文件,仍然找不到对所有这些问题的任何合理解释。我错过了什么导致了这些奇怪的问题?到目前为止,我的谷歌fu还不足以解决这个问题
请帮助或同等地向我指出AWS网关中的特定文档,这些文档可以帮助解决我在这些主题上错过的这个或任何讨论线程
至少对其中一个问题有一个答案会让我对自己的方法有一个清晰的认识
谢谢大家
-v
标志运行curl,您将获得详细的输出,其中将包括随请求发送的所有头。邮递员/浏览器应该有类似的东西,请比较它们,你应该会发现不同。
另外,为了消除自定义域可能出现的问题,您是否尝试过向非自定义域(*.execute api)URI发出请求快速回答:添加标题
接受编码:identity
我在使用AWSAPI网关时遇到了完全相同的问题。在我的例子中,解决方案是从postman添加headerAccept Encoding:identity
,或者配置AWS API将其默认发送到我的后端
当我直接从postman调用后端时,我可以将标题设置为
gzip
,postman将正确显示响应,但当我通过AWS执行时,这似乎是一个我无法解决的问题。将提到的头设置为Identity
将指示后端不修改响应(或应用Identity函数)。我也遇到了同样的问题
对我们的用例有效的解决方案是在应用服务器上禁用压缩。然后从AWS API网关设置中启用内容编码功能:
不要忘记从参考资料部分重新部署API阶段强>
对于在AWS Lambda中运行的Express.js API端点和通过API网关编辑的proxy
ed,您可以修改app.js
如下所示:
const compression = require('compression');
if (!process.env.LAMBDA_TASK_ROOT) {
app(compression()); // compression is only enabled when not in Lambda
}
也为我工作。谢谢哇,我已经做了好几个小时了,我想我永远都不会明白这一点。谢谢对我来说,所有其他端点都在没有这个头的情况下工作,只有负载更大的端点没有响应。将头添加到请求使其工作。是否有任何其他配置需要为API网关进行修改,以使其在没有标头的情况下工作?