node.js - 此请求已被阻止;从 S3 向 EC2 节点端点发出请求时,必须通过 HTTPS 错误提供内容
问题描述
我的反应网站端点托管在 AWS S3 中,用于触发电子邮件的节点端点部署在 EC2 实例中。我可以使用以下代码在本地访问 EC2 实例:
app.post('/api/email', (req, res, next) => {
sendGrid.setApiKey(config_data.SENDGRID_API_KEY);
const msg = {
to: 'random@random.com',
from: 'random@random.com',
subject: req.body.email',
text: req.body.message
}
访问 EC2 端点 /api/email 的代码:
Axios.post('http://public-IPv4:EC2_PORT_NUM/api/email', this.state)
.then( res => {
if(res.data.success){
this.setState({
disabled: false,
emailSent: true
});
} else{
this.setState({
disabled: false,
emailSent: false
});
}
})
.catch(err => {
console.log(err.response.data);
this.setState({
disabled: false,
emailSent: false
});
});
当代码在本地部署时,电子邮件会根据需要触发。但是,当我在 S3 中部署 Web 端点并尝试触发电子邮件时,会出现以下错误:
Mixed Content: The page at 'https://mywebsiteaddress/api/email' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint '<ENDPOINT_LINK>'. This request has been blocked; the content must be served over HTTPS.
在本地,我可以使用“HTTP”(http://public-IPv4:EC2_PORT_NUM/api/email)发出请求,但通过 S3 请求“HTTPS”。然后我将链接更改为“HTTPS”,但它仍然不能在本地工作,也不能从 S3 工作。请让我知道如何解决这个问题。提前致谢。
本地和 S3 均拒绝连接。请协助。
EDIT2:按照 Amazon EC2 中的 HTTPS 设置中给出的步骤创建 LB 并向其添加证书。我认为请求已到达负载均衡器,但在再次重定向到端点时出错。这是错误:
解决方案
从您的 Web 浏览器返回混合内容错误:https ://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content
这是出于安全原因。当您使用 https 协议打开您的前端网站(S3 托管)时,您的任何 XHR 请求的 Web 浏览器也需要 https。
要解决它,您需要为您的 EC2 实例提供 SSL 证书,或者尝试使用 http:// 而不是 https:// 加载您的 S3 页面
推荐阅读
- swift - 如何修复 UIcollectionViewCell 显示空单元格?
- visual-studio-code - VScode远程'_workbench.downloadResource'失败
- java - 如何使用springboot将数据从数据库动态更新到图表(highchart)
- javascript - 我同时使用 React 和 Google Translation api。还有一个问题
- python-3.x - Discord 命令不完全起作用,有什么想法吗?
- java - 处理重复的方法头
- docker - 在docker中使用“apachectl -k restart”命令时出现此错误,http:php,请
- python - 在 wxPython 中设置 Sizer
- javascript - 在 ES6 中获取数组内的值数组
- linux - 如何在 /tmp/stage2/ 下创建一个名为 system.info 的文件?