【问题标题】:HTTPS conflict with HTTPHTTPS 与 HTTP 冲突
【发布时间】:2022-11-22 06:55:09
【问题描述】:
HTTPS 与 HTTP 冲突
我在 React 和 NODEjs 上制作了我的第一个全栈项目,并将其部署在 netlify 上。
我的后端服务器在 HTTP 本地主机上运行。
这是一个问题:
我的应用程序可以在我的 Mac 上的 Chrome 中运行,但不能在其他浏览器和计算机上正常运行。
其他计算机可以下载index.js(显示注册和登录页面),似乎CORS没有问题,但身份验证不起作用。
Safari 记录错误:
[已阻止] https://MYAPP.netlify.appwas 的页面不允许显示来自 http://localhost:3500/register 的不安全内容。
不允许请求资源
由于访问控制检查,XMLHttpRequest 无法加载 http://localhost:3500/register。
我不明白为什么该应用程序可以在我的 MAC 上运行,但是
在其他计算机上没有,也找不到有关如何解决此 HTTPS - HTTP 冲突的答案
我试图在 CORS 中找到问题,但看起来 CORS 没问题。另外,我尝试用 HTPPS 重写服务器,但没有成功。
【问题讨论】:
标签:
node.js
express
https
【解决方案1】:
我从未使用过 Netlify,所以我可能是错的,但我怀疑您的问题与 Netlify 没有直接关系。
Safari 错误消息表明您的前端正在尝试直接与本地主机对话。在正常情况下,localhost 是“正在尝试连接的计算机”的别名。这意味着当有人运行您的前端时,浏览器会尝试与运行在浏览器所在的同一台计算机上的后端通信。
这在您的计算机上的 Chrome 中有效,因为您可能在计算机上运行后端以进行测试。 Safari 只是抱怨前端是通过 HTTPS 加载的,但正在尝试与非 HTTPS 服务器通信。这并不是说它不能与后端对话,而是说它甚至不会尝试。
如果我是对的,并且您关闭了计算机的后端,它也会在您的计算机上开始失败,即使在 Chrome 上也是如此。
如果这是问题所在,解决方案可以是以下两种情况之一:您可以在具有每个人都可以连接到的域名/IP 地址的某个地方运行后端,或者您需要在某个地方为您的后端运行代理也满足这些条件,并且有办法将请求传递到您的完整后端确实运行的地方。
您需要找到一种方法在您自己的计算机以外的其他地方运行您的后端,或者在其他地方有一些代理请求到您的计算机,然后将这些请求中继到本地主机地址。你如何去做取决于你在原始问题中没有指定的事情。