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

TOR网络中Spring后端与Angular前端API调用CORS异常排查求助

TOR环境下Spring+Angular应用的CORS与API调用问题

问题描述

我知道这可能和已有问题类似,也查过相关内容,但还是解决不了。我的架构是Spring Web Java后端给Angular前端提供API服务,已经在Apache2里给Java和Angular配置了代理,TOR配置完成后洋葱地址能正常访问,但API响应出问题了:

  • TOR浏览器拦截所有前端API调用
  • OPTIONS请求报错:CORS Allow Origin Not Matching Origin
  • POST请求报错:NS_ERROR_DOM_BAD_URI
  • GET请求返回200状态码,但还是被浏览器拦截,页面加载不了内容

请求头信息

OPTIONS /coin/fees?get=true HTTP/1.1
Host: myonionUrlHere.onion
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Origin: null
Connection: keep-alive
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
Pragma: no-cache
Cache-Control: no-cache

响应头信息

HTTP/1.1 200 
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: null
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Allow-Headers: content-type
Access-Control-Expose-Headers: Access-Control-Allow-Origin
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 1800
Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH
Content-Length: 0
Date: Sun, 28 Jan 2024 06:25:56 GMT

问题分析

核心问题是请求头中的Origin: null。这种情况通常发生在前端页面通过file://协议本地加载,而非通过洋葱地址的HTTP协议访问。TOR浏览器对跨域安全限制更严格,即便后端返回Access-Control-Allow-Origin: null,浏览器仍会因为安全策略拦截请求。

解决方案

1. 确保前端通过洋葱地址正常加载

检查Angular前端是否通过http://myonionUrlHere.onion访问,而非本地文件或其他协议。确认Apache2配置正确映射洋葱地址到前端服务,让页面通过洋葱域名的HTTP协议加载,此时Origin会自动设置为洋葱地址,而非null。

2. 调整Spring后端CORS配置

不要硬编码Access-Control-Allow-Origin: null,改为允许洋葱地址的Origin,或动态匹配请求Origin:

静态允许洋葱地址示例

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://myonionUrlHere.onion") // 替换为你的洋葱地址
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(1800);
    }
}

动态匹配Origin示例

@Bean
public CorsFilter corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true);
    config.addAllowedHeader("*");
    config.addAllowedMethod("*");
    // 允许所有符合洋葱域名模式的Origin,或直接指定你的洋葱地址
    config.setAllowedOriginPatterns(Collections.singletonList("*.onion"));
    source.registerCorsConfiguration("/**", config);
    return new CorsFilter(source);
}

3. 检查Apache2代理配置

确保代理转发时保留Origin请求头,未被修改或移除。示例配置片段:

ProxyPass /api http://localhost:8080/api
ProxyPassReverse /api http://localhost:8080/api
# 确保Origin头自然传递,不要手动清空
# 若需强制设置,可添加:RequestHeader set Origin "http://myonionUrlHere.onion"

4. 临时调整TOR浏览器安全等级(仅测试用)

若只是临时测试,可降低TOR浏览器安全等级:菜单 → 设置 → 隐私与安全 → 安全等级改为"标准"。但不建议长期使用,优先从根源解决CORS问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:11:19