使用WordPress标准REST API:无法从非HTTPS站点拉取数据求助
这大概率是浏览器的混合内容限制在搞鬼——现在主流浏览器默认会阻止HTTPS页面加载HTTP资源,哪怕你用的是WordPress原生REST API也逃不过这个规则。毕竟HTTPS是加密环境,混入未加密的HTTP资源会破坏页面安全链,浏览器出于安全考量直接就拦截了。
给你几个可行的解决方案,按优先级排序:
最彻底的方案:把目标HTTP站点升级到HTTPS
现在免费SSL证书(比如Let's Encrypt)随处可得,不管是主机面板一键配置还是手动部署都不算复杂。升级后不仅能解决API调用问题,还能提升站点SEO排名和用户信任度,一举多得。临时测试用:放宽浏览器的混合内容限制
如果你只是想测试功能,不想折腾升级,可以临时让浏览器允许混合内容:- Chrome:点击地址栏的锁图标 → 选择「站点设置」→ 找到「不安全内容」选项,改成「允许」,刷新页面即可。
- Firefox:点击地址栏的锁图标 → 选择「连接安全」→ 点击「禁用保护」,确认允许混合内容。
注意:这只适合本地测试,绝对不能让生产环境的用户这么操作,既不安全又影响体验。
检查自身WordPress的SSL配置
虽然你说没做额外配置,但有时候主机商会自动开启HTTPS强制跳转,或者WordPress后台「设置→常规」里的「WordPress地址(URL)」和「站点地址(URL)」被设成了HTTPS。如果你的前端页面是HTTPS协议,调用HTTP接口自然会被浏览器拦截,这时候要么把目标接口换成HTTPS,要么用下面的代理方案。权宜之计:用代理中转请求
如果目标站点暂时没法升级HTTPS,可以在自己的WordPress上写个简单的代理脚本,让代理去请求HTTP数据,你的前端再通过HTTPS调用这个代理。比如创建一个proxy.php文件放在站点根目录:<?php // 允许跨域请求(根据需要开启) header("Access-Control-Allow-Origin: *"); // 获取目标URL并验证合法性 $targetUrl = isset($_GET['url']) ? $_GET['url'] : ''; if (filter_var($targetUrl, FILTER_VALIDATE_URL)) { // 发起请求并返回结果 $response = file_get_contents($targetUrl); echo $response; } else { // 返回错误 http_response_code(400); echo "Invalid or missing target URL"; } ?>然后前端调用的时候改成:
https://your-wordpress-site.com/proxy.php?url=http://target-http-site.com/your-api-endpoint,这样就绕开了浏览器的混合内容限制。记得要做好安全验证,防止恶意用户传入危险URL。
内容的提问来源于stack exchange,提问作者Emre Zavar

