You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Stripe结账页面被阻止:不安全内容报错求助

解决Stripe结账时的“不安全内容”混合问题

问题根源

你碰到的是**混合内容(Mixed Content)**错误:当页面(假设为HTTPS协议部署)尝试加载HTTP协议的资源时,浏览器会出于安全策略阻止这类跨协议请求。你的前端代码用HTTPS请求了本地HTTP服务,这直接触发了该错误。

代码问题点

  1. 客户端fetch地址错误:你写了https://localhost:4000/checkout,但服务端是纯HTTP启动的(app.listen(4000)未配置HTTPS证书),协议不匹配导致请求被拦截。
  2. 潜在隐患:success_url和cancel_url使用http://localhost,若前端为HTTPS环境,跳转回这些地址时也会触发混合内容警告。

修复步骤

1. 统一本地开发协议(优先方案)

如果前端通过http://localhost:3000访问,直接将客户端请求地址改为HTTP协议:

const checkout = async (e) => {
    e.preventDefault();
    await fetch("http://localhost:4000/checkout", { // 替换https为http
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify({ items: cart.items }),
    })
      .then((response) => response.json())
      .then((response) => {
        if (response.url) {
          window.location.assign(response.url);
        }
      });
  };

2. 前端用HTTPS时的处理

如果前端是HTTPS访问(如本地配置了HTTPS证书、或部署到线上HTTPS域名),需要让后端也提供HTTPS服务:

  • 用Node.js的https模块配置本地证书,启动HTTPS服务;
  • 或使用ngrok等工具,将本地http://localhost:4000转发为临时HTTPS地址,客户端请求该地址即可。

3. 生产环境规范

上线时务必将所有URL替换为HTTPS协议,包括:

  • 后端接口地址
  • Stripe会话的success_url和cancel_url

额外排查技巧

打开浏览器控制台的「安全」标签,里面会明确列出被阻止的HTTP资源,可快速定位其他潜在的混合内容问题。

内容的提问来源于stack exchange,提问作者Saaleh Nelson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 04:52:42