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

Express.js部署Tor网络遇跨域问题:静态文件因同源策略被拦截

解决Tor网络中Express静态资源被强制HTTPS请求导致的加载失败问题

问题分析

你基于Express开发的网站在本地运行正常,但部署到Linux+Tor网络后,静态资源(style1.css、script1.js)无法加载。核心原因是Tor浏览器强制将静态资源请求转为HTTPS,而你的服务器仅配置了HTTP服务,导致CORS请求失败——即使关闭HTTPS唯一模式、硬编码HTTP路径也无效。

解决方案

按以下步骤逐一排查修复:

  1. 彻底清除Tor浏览器缓存
    关闭HTTPS唯一模式后,浏览器缓存的HSTS规则或重定向配置可能仍在生效。操作:

    • 打开Tor浏览器菜单 → 选项 → 隐私与安全
    • 点击「清除浏览数据」,选择「全部时间」范围,勾选「缓存的网页内容」和「Cookie和站点数据」,确认清除
    • 之后用新的隐私窗口访问站点,避免缓存干扰
  2. 调整Helmet配置,禁用HTTPS强制升级规则
    仅关闭HSTS不够,需确保Helmet的内容安全策略(CSP)没有强制将HTTP请求升级为HTTPS。修改你的Helmet配置:

    const helmet = require('helmet');
    
    app.use(helmet({
      // 完全禁用HSTS
      hsts: false,
      contentSecurityPolicy: {
        directives: {
          defaultSrc: ["'self'"],
          scriptSrc: ["'self'"],
          styleSrc: ["'self'"],
          // 关键:关闭HTTP请求强制升级为HTTPS
          upgradeInsecureRequests: false
        }
      }
    }));
    
  3. 静态资源使用相对路径,确保Express正确托管静态文件
    不要在HTML中硬编码洋葱地址的绝对路径,改用相对路径(如/style1.css),这样请求会自动跟随页面的HTTP协议。同时确认Express已正确配置静态文件目录:

    // 假设静态文件存放在项目根目录的public文件夹下
    app.use(express.static('public'));
    
  4. 检查Tor隐藏服务配置,避免绑定HTTPS端口
    打开Tor配置文件(通常路径为/etc/tor/torrc或~/.torrc),确认隐藏服务端口仅映射到HTTP:

    HiddenServiceDir /var/lib/tor/your_hidden_service/
    HiddenServicePort 80 127.0.0.1:3000
    

    不要配置HiddenServicePort 443 ...,因为你的服务器未开启HTTPS服务。修改后重启Tor服务:sudo systemctl restart tor

  5. 确保Express服务器监听所有网卡地址
    不要只监听localhost,否则Tor无法访问你的服务。修改监听代码:

    server.listen(3000, '0.0.0.0', () => {
      console.log('Server running on 0.0.0.0:3000');
    });
    

验证步骤

  1. 重启Express服务器和Tor服务
  2. 打开Tor浏览器的隐私窗口
  3. 访问HTTP协议的洋葱地址,检查控制台是否还有CORS错误,静态资源是否正常加载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:10:00