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

jQuery $.ajax POST请求触发CORS错误,Java服务器配置待完善

解决CORS请求中cache-control头被拦截的问题

你遇到的错误已经把原因说得很明白了——浏览器的预检请求返回的Access-Control-Allow-Headers里没包含你发送的cache-control头,所以直接被CORS策略拦住了。

问题根源

你的Java CORS过滤器只配置了允许的请求源和请求方法,但没声明允许哪些自定义请求头。当你的POST请求带了cache-control这种非简单请求头时,浏览器会自动发送一个OPTIONS预检请求,询问服务器“这些头我能发吗?”,结果服务器没明确允许cache-control,浏览器就直接把请求拦截下来了。

修复方案

修改你的CORS过滤器代码,补上Access-Control-Allow-Headers配置,把你用到的Content-Type和cache-control都加进去:

@Override
public void filter(ContainerRequestContext containerRequestContext, ContainerResponseContext containerResponseContext) throws IOException {
  /* Enabling CORS filters */
  MultivaluedMap<String, Object> headers = containerResponseContext.getHeaders();
  headers.add("Access-Control-Allow-Origin", "*");
  headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
  // 新增这一行,明确允许请求中携带的头信息
  headers.add("Access-Control-Allow-Headers", "Content-Type, cache-control");
}

额外说明

  • 要是以后需要添加其他自定义请求头,直接在Access-Control-Allow-Headers里用逗号追加即可。
  • OPTIONS预检请求是浏览器自动触发的,你不需要手动处理,但服务器必须正确响应这些头信息才能通过检查。
  • 为什么Postman能成功?因为Postman不会像浏览器那样严格执行CORS策略,它跳过了预检请求的检查环节,所以能直接拿到响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:49:59