React项目HTTPS部署后,为什么AJAX请求到http://api端点被阻止?
我在React项目里用fetch调用公司旧系统的API接口,开发环境用HTTPS没问题,但部署到HTTPS服务器后突然报错:”Mixed Content: The page was loaded over HTTPS, but requested an insecure resource”。
代码是这样的:
fetch('http://api.example.com/data')
.then(res => res.json())
.then(data => this.setState({ items: data }))
.catch(err => console.error('Fetch error:', err));
我试过在nginx配置里加headers强制HTTPS,也尝试过用相对协议//api.example.com,但还是不行。难道必须要求后端也支持HTTPS吗?有没有前端能解决的办法?
最简单直接的办法就是把API地址改成
https://api.example.com/data。如果后端真的不支持HTTPS,那前端确实没啥好办法绕过去,除非你能搞定后端加证书。另外提供一个折中方案:让你的Nginx做个反向代理,把HTTPS请求转到后端的HTTP接口上。配置大概长这样:
然后你前端代码改成调用自己的域名:
fetch('https://yourdomain.com/data')。复制过去试试,应该就能搞定。不过说真的,还是建议推动后端搞个证书,不然这种问题会一直折腾人。