Search code examples
amazon-web-servicesamazon-ec2amazon-cloudfrontserverless-framework

Cloud Front : The request could not be satisfied


I am coming across this problem, i have a chat server which needs to communicate to the lambda service hosted in aws , but cloud front throws the following error.

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>

This is how my request goes in application.

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

the chat server.js is hosted in ec2. what is the issue here?


Solution

  • require('http');

    That is an HTTP client -- not an HTTPS client.

    Specifying port 443 doesn't result in an HTTPS request, even though port 443 is the assigned port for HTTPS. It just makes an ordinary HTTP request against destination port 443.

    This isn't a valid thing to do, so CloudFront is returning a Bad Request error.

    You almost certainly want to require('https');.