Cloudfront:无法满足请求

Cloud Front : The request could not be satisfied

我遇到了这个问题,我有一个聊天服务器需要与 aws 中托管的 lambda 服务通信,但是云端抛出以下错误。

BODY: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Bad request.
<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: h5kPdVnMXwh-P7e7mxQ5LL1gj9fAupp_MNAPxmxufI74W4WhE_MByw==
</PRE>
<ADDRESS>
</ADDRESS>
</BODY></HTML>

我的申请是这样的。

const options = {
    hostname: 'xxx.uat.com',
    port : '443',        
    path: '/qa/addMessage',
    method: 'POST'
};
const req = http.request(options, (res) => {
}

聊天 server.js 托管在 ec2 中。这里有什么问题?

我以前见过这个问题。它的发生是由于以下原因,

  1. 无效协议(使用 http 而不是 https)
  2. 未知的 http 动词,确保端点在您的案例中实现了 POST。如果您正在使用 API 网关,请确保您已部署它。

require('http');

那是 HTTP 客户端 -- 不是 HTTPS 客户端。

指定端口 443 不会产生 HTTPS 请求,即使端口 443 是为 HTTPS 分配的端口。它只是针对目标端口 443 发出一个普通的 HTTP 请求。

这不是正确的做法,因此 CloudFront 返回 Bad Request 错误。

您几乎肯定想要 require('https');

就我而言,我在调用 CloudFront 时有一个客户端负载均衡器。因此,我通过 IP 地址而不是主机名调用 CF。 我咨询了 Amazon AWS 支持团队,在这种情况下,CF 拒绝了请求并且 returns“403 错误,可以满足请求”。

我遇到了同样的问题,this thread对我有用。

此错误消息:

"The request could not be satisfied. Bad Request."

来自客户端,错误可能是由于以下原因之一造成的:

  1. 请求是通过 HTTP 发起的,但 CloudFront 分发配置为仅允许 HTTPS 请求。
  2. 请求的备用域名 (CNAME) 未与 CloudFront 分配相关联。

(在我的例子中,原因是#2)。

我遇到了同样的错误,我通过从邮递员请求中删除正文解决了这个问题。

对我来说,问题是,我重新启动了更改了实例 ID 的 EC2,但我的云端源仍然指向以前的 ID。所以,一旦我改变它,它就可以正常工作。

就我而言,我遇到了与@Kireeti K 相同的问题,我通过从 postman 请求中删除正文解决了这个问题。

如果您发送带有正文的 GET 请求,Cloudfront 似乎会抛出错误,如果您想使用正文,则需要将您的方法更改为 GET 以外的方法,对我来说 POST 工作得很好,错误消失了,我能够阅读正文。