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 中。这里有什么问题?
我以前见过这个问题。它的发生是由于以下原因,
- 无效协议(使用 http 而不是 https)
- 未知的 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."
来自客户端,错误可能是由于以下原因之一造成的:
- 请求是通过 HTTP 发起的,但 CloudFront 分发配置为仅允许 HTTPS 请求。
- 请求的备用域名 (CNAME) 未与 CloudFront 分配相关联。
(在我的例子中,原因是#2)。
我遇到了同样的错误,我通过从邮递员请求中删除正文解决了这个问题。
对我来说,问题是,我重新启动了更改了实例 ID 的 EC2,但我的云端源仍然指向以前的 ID。所以,一旦我改变它,它就可以正常工作。
就我而言,我遇到了与@Kireeti K 相同的问题,我通过从 postman
请求中删除正文解决了这个问题。
如果您发送带有正文的 GET
请求,Cloudfront 似乎会抛出错误,如果您想使用正文,则需要将您的方法更改为 GET
以外的方法,对我来说 POST
工作得很好,错误消失了,我能够阅读正文。
我遇到了这个问题,我有一个聊天服务器需要与 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 中。这里有什么问题?
我以前见过这个问题。它的发生是由于以下原因,
- 无效协议(使用 http 而不是 https)
- 未知的 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."
来自客户端,错误可能是由于以下原因之一造成的:
- 请求是通过 HTTP 发起的,但 CloudFront 分发配置为仅允许 HTTPS 请求。
- 请求的备用域名 (CNAME) 未与 CloudFront 分配相关联。
(在我的例子中,原因是#2)。
我遇到了同样的错误,我通过从邮递员请求中删除正文解决了这个问题。
对我来说,问题是,我重新启动了更改了实例 ID 的 EC2,但我的云端源仍然指向以前的 ID。所以,一旦我改变它,它就可以正常工作。
就我而言,我遇到了与@Kireeti K 相同的问题,我通过从 postman
请求中删除正文解决了这个问题。
如果您发送带有正文的 GET
请求,Cloudfront 似乎会抛出错误,如果您想使用正文,则需要将您的方法更改为 GET
以外的方法,对我来说 POST
工作得很好,错误消失了,我能够阅读正文。