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

浏览器使用JavaScript fetch向Tomcat发送POST请求报错如何解决?

问题根因

  • 核心错误是fetch请求的URL未携带HTTP协议头,浏览器将localhost识别为URL协议而非域名,直接抛出scheme不支持的异常,和Postman自动补全协议的逻辑不同。
  • 若前端页面部署端口和后端8080端口不一致,补全协议后还会触发浏览器同源策略的CORS跨域校验,Postman默认跳过跨域校验所以请求正常。

解决方案

第一步:修正前端fetch请求URL

给请求地址补全http://协议头,修改后代码如下:

let candy = {
  id: id, // 传入预先声明的id变量
  flavor: 0
};
fetch('http://localhost:8080/api/candy', {
  method: "POST",
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  },
  body: JSON.stringify(candy)
})
.then(response => response.json())
.then((response) => {
  console.log(response.message);
});

第二步:(可选)后端配置CORS跨域规则

如果修正URL后仍报跨域错误,在Spring Boot项目中添加如下任意一种CORS配置即可:

  1. 局部接口配置:给对应Controller类或接口方法添加@CrossOrigin注解
@RestController
@RequestMapping("/api")
// 允许所有来源访问该类下的接口,生产环境可替换为实际前端域名如"http://localhost:5173"
@CrossOrigin(origins = "*") 
public class CandyController {
    @PostMapping("/candy")
    public Candy addCandy(@RequestBody Candy candy) {
        // 业务逻辑
    }
}
  1. 全局跨域配置:新增CORS配置类
@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*") // 生产环境建议配置为具体前端域名
                .allowedMethods("*")
                .allowedHeaders("*")
                .maxAge(3600);
    }
}

补充:Chrome报的favicon.ico 404错误属于浏览器默认请求站点图标导致的不影响业务的报错,无需处理,如需消除可将favicon.ico文件放入Spring Boot项目的resources/static目录下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 16:18:03