strict-origin-when-cross-origin 错误是浏览器安全策略导致的跨域请求失败问题。
它通常出现在 Chrome 90+ 版本中,当你的前端请求后端 API 时触发,需要通过 CORS 配置或请求头调整来解决。

错误原因详解

这个错误源于浏览器的 Referrer Policy: strict-origin-when-cross-origin 默认策略。

  • 跨域限制 :前端域名与后端 API 域名不一致(协议、主机、端口任一不同),浏览器阻断请求以保护安全。
  • Referrer 问题 :HTTPS 页面请求 HTTP 资源时,Referrer 被剥离为 origin,只发协议+域名部分,导致 CORS 校验失败。
  • 常见场景 :Vue/React 前端部署 Nginx 后调用后端接口;本地开发 vs 生产环境切换。

"浏览器默默阻断了无数跨域请求,就是因为 Same-Origin Policy 和 CORS 机制在守护数据安全。"

快速解决方案

方案1: 后端配置 CORS(推荐,生产环境首选)

在后端服务器添加 CORS 响应头,允许指定来源访问。避免用 * 通配符(安全隐患)。

Spring Boot 示例 (Java):

java

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("https://your-frontend.com")  // 指定前端域名
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowCredentials(true)
                .maxAge(3600);
    }
}

Nginx 配置 (反向代理时):

location /api/ {
    proxy_pass http://backend:port;
    add_header Access-Control-Allow-Origin "https://your-frontend.com";
    add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
    add_header Access-Control-Allow-Headers "Content-Type, Authorization";
}

PHP 示例

php

header('Access-Control-Allow-Origin: https://your-frontend.com');
header('Access-Control-Allow-Methods: GET, POST, PUT');
header('Access-Control-Allow-Headers: *');

方案2: 前端请求调整(开发调试用)

修改 fetch 或 Axios 的 referrerPolicy

javascript

fetch('https://api.example.com/data', {
    method: 'POST',
    referrerPolicy: 'no-referrer-when-downgrade',  // 或 'no-referrer'
    credentials: 'include'
});
  • Axiosaxios.defaults.withCredentials = true; 并设置 headers。

方案3: 开发环境绕过

  • Chrome 启动参数--disable-web-security --user-data-dir=/tmp/chrome(仅本地测试,勿生产)。
  • 代理工具 :用 Nginx/Vite proxy 前端请求到同域,避免跨域。
  • JSONP :仅 GET 请求,动态 script 标签(不推荐现代项目)。

多角度对比:方案优缺点

方案| 优点| 缺点| 适用场景
---|---|---|---
后端 CORS| 安全、生产就绪| 需要服务器权限| 线上部署 35
前端 referrerPolicy| 快速、无服务器改动| 浏览器兼容性差| 开发调试 4
Nginx 代理| 无跨域、无需后端改| 配置复杂| 单机部署 1
浏览器禁用安全| 零配置| 极不安全| 纯本地测试 10

最佳实践与注意事项

  • 指定精确 Origin :用具体域名替换 *,降低 CSRF 风险。
  • 处理 OPTIONS 预检 :后端必须响应 200 并带 CORS 头。
  • HTTPS 一致 :全站 HTTPS,避免协议降级。
  • 测试工具 :Postman 无 CORS,用浏览器地址栏直访 API 验证后端。
  • 2026 趋势 :随着浏览器加强(如 Chrome 128+),CORS 配置成标配,Keycloak 等认证系统需额外 permit OPTIONS。

TL;DR:优先后端加 CORS 头,指定前端域名;开发时用 referrerPolicy 快速试水。

Information gathered from public forums or data available on the internet and portrayed here.