浏览器控制台满屏跨域报错:CORS预检、凭证模式与通配符限制的配置记录

简介: 前端一夜之间全报CORS跨域。记录如何用Network区分简单请求与OPTIONS预检、Nginx预检响应头配置、带凭证时通配符origin为何被浏览器拒绝,以及Vary:Origin等5个高频坑。

上周一早会,前端小伙把电脑往大家面前一推:"你们看控制台,全是红色报错,接口一个都调不通,但 Postman 里好好的。"我凑过去一看,满屏 Access to fetch has been blocked by CORS policy。问题是这个站上周还好好的,没人动过后端配置,一夜之间就全跨域了。

前后折腾了大半天,把 CORS 预检、凭证模式和通配符那几个坑挨个踩了一遍。记录下来,下次再遇到别从头查。

一、先分清:是真跨域,还是预检没过

很多人看到 CORS 报错就慌,其实 CORS 请求分两种:

  1. 简单请求:GET/POST 加几个常见头,浏览器直接发,服务端回带 Access-Control-Allow-Origin 就行。
  2. 预检请求:带了自定义头(比如 Authorization)、用了 PUT/DELETE、或 Content-Type 是 application/json,浏览器会先发一个 OPTIONS 探测。

控制台那条报错如果前面有一条 OPTIONS 请求是 404 或 500,那就是预检挂了,根本没走到真正的接口。先在 Network 里找 OPTIONS 请求的状态码,别盯着 POST 看。

二、一夜之间全挂:是 Nginx 配置被覆盖了

我们这次的根因:运维更新 Nginx 配置时加了一段新的 location,把原来的 CORS 响应头覆盖了。原来后端自己会回 CORS 头,结果 Nginx 那层直接把 OPTIONS 拦了,回了个 404。

Nginx 正确配预检是这样:

# 处理 OPTIONS 预检
if ($request_method = OPTIONS) {
    add_header Access-Control-Allow-Origin $http_origin;
    add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
    add_header Access-Control-Allow-Headers "Authorization, Content-Type, X-Requested-With";
    add_header Access-Control-Max-Age 86400;
    add_header Access-Control-Allow-Credentials true;
    add_header Content-Length 0;
    add_header Content-Type "text/plain; charset=utf-8";
    return 204;
}

这里最关键的一行是 Access-Control-Max-Age 86400:预检结果让浏览器缓存一天,别每个请求都来探一次,能省一大半 OPTIONS 流量。

三、最大的坑:通配符跟凭证不能一起用

这个坑踩了好几年还是有人踩。前端用的是带 cookie 的请求(credentials: 'include'),后端图省事回了:

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

浏览器直接拒掉:Wildcard '*' cannot be used in conjunction with Access-Control-Allow-Credentials。

正确做法是动态回具体 origin,别用星号:

# Nginx 里回请求方自己的 Origin
add_header Access-Control-Allow-Origin $http_origin always;
add_header Access-Control-Allow-Credentials always;

但这样等于放开所有站点带凭证跨域,生产环境要配白名单校验 origin 是否在允许列表里,别直接无脑回 $http_origin。

四、其他几个高频坑

  • 响应头漏 Vary: Origin:CDN 或缓存层把 A 站的响应缓存给了 B 站,origin 对不上又报错。加上 Vary: Origin 让缓存按 origin 区分。
  • 302 跳转后跨域头丢了:接口重定向到登录页,跳转后的响应没带 CORS 头,浏览器照样拦。
  • 非法响应头:自定义响应头要在 Access-Control-Expose-Headers 里声明,否则前端 JS 读不到(比如要拿自定义的 X-Total-Count)。

五、踩坑清单(5 条实际踩过的)

  1. CORS 报错先看 Network 里有没有 OPTIONS 预检,预检没过后面全是表象。
  2. 带 cookie/Authorization 的请求,Allow-Origin 绝不能用 *,必须回具体 origin。
  3. Nginx 和后端都回 CORS 头会重复,二选一,别两层都加。
  4. 配了缓存(CDN/Redis)一定加 Vary: Origin,否则串站。
  5. Max-Age 设长一点(86400 秒),减少 OPTIONS 探测,但改策略后要记得让用户清缓存或换版本。
配置 简单请求 带凭证请求
Allow-Origin: * 可以 浏览器拒绝
Allow-Origin: 具体域名 可以 可以
Allow-Credentials: true 需配合具体 origin 必须

这次跨域排查是在乔拓云的建站后台上做的,我主要负责定位 Nginx 配置覆盖问题、重写预检响应头和 origin 白名单那套逻辑,改完后控制台红色报错全消,线上接口恢复正常,预检请求也被浏览器缓存住了。

复盘

  • CORS 问题先定位是简单请求还是预检请求,Network 里的 OPTIONS 状态码是突破口。
  • 带凭证场景通配符 origin 是死路,必须动态回具体 origin 并做白名单。
  • 缓存层一定要配 Vary: Origin,否则改了配置还可能因为旧缓存报错半天。

以上是个人实践记录,各平台具体功能以官方实时信息为准。

大家处理跨域时,origin 白名单是放在 Nginx 层,还是在网关统一做?

相关文章
|
27天前
|
人工智能 自然语言处理 监控
从ChatGPT错误数据到Product Schema修复:结构化数据验证的排查流程
AI搜索引擎抓取商品价格错误数据的排查与修复记录:Product Schema结构化数据验证、JSON-LD字段补全、增量同步机制建立的完整流程,含对比表格与踩坑清单,适合电商技术开发者参考。
|
2月前
|
Web App开发 安全 应用服务中间件
网站被浏览器报不安全:HTTPS证书链、安全响应头与Mixed Content的排查记录
客户网站突然被浏览器报不安全,排查发现是HTTPS证书链不完整加安全响应头缺失。本文记录了证书链补全、CSP/HSTS等安全响应头配置和Mixed Content修复的完整过程,以及5个实际踩过的坑。
|
25天前
|
人工智能 运维 IDE
阿里云Qoder CN全家桶有哪些?QoderWork、CLI、QoderWake、Cloud Agents及Mobile指南
阿里云Qoder CN是面向开发与办公的国产AI智能体全家桶,含Qoder CN(编程)、QoderWork CN(办公)、CLI、QoderWake(数字员工)、Cloud Agents(云端托管)及Mobile六款子产品,全栈支持多模型、高合规、一体化智能协作。
166 0
|
25天前
|
人工智能 开发者
Qoder Fast 上线:3 秒响应,还更省 Credits
Qoder 推出 Fast 模式:首次响应仅需3秒,全链路优化模型、Agent 与网络层,兼顾速度、质量与成本。适用于补代码、解 Bug、写攻略等日常任务,响应快如“即时”,效率跃升,专注力不被等待打断。
239 0
|
25天前
|
存储 人工智能 开发者
2026 年阿里云 GPU 云服务器收费价格多少钱?最新版收费清单全解析
2026年阿里云GPU云服务器的收费体系灵活,从小时级临时算力到年度长期算力,覆盖AI训练、推理、渲染等多样化需求。整体成本由实例规格、付费模式、地域、存储带宽等多个因素共同决定,新用户大促期间可以拿到非常可观的折扣。在选型前,建议先用CLI查询实例规格,结合业务运行时长、算力需求,做完整的成本测算,合理选择计费方案,同时做好资源释放、快照管理,规避不必要的额外支出。企业在规划大模型项目算力预算时,优先评估业务持续运行时间,按需选择T4、A10、L20等不同显卡实例,搭配节省计划或者包年包月优惠,最大化控制算力成本,保障AI业务稳定落地。
338 0
|
25天前
|
人工智能 Shell API
DeepSeek Harness上手实战:开源Agent底座完整部署与配置教程
随着大模型技术快速迭代,仅依靠对话API只能完成文本输出,想要让AI具备读写本地文件、执行终端脚本、拆解多步骤复杂任务、调度子智能体的实操能力,就需要Agent运行底座作为支撑。2026年8月开源的DeepSeek Harness(简称DSH),提出Agent = Model + Harness的核心理念,大模型负责思考推理,Harness充当智能体的执行载体,完成环境感知、工具调度、会话生命周期管控、沙箱隔离、任务循环与子Agent调度等工作。项目依托Cordis微内核,贯彻“一切皆插件”的设计思想,模型适配器、工具集、存储组件、Web前端界面全部以插件形式实现,无需修改源码就可以替换组件、
357 0
|
2月前
|
存储 人工智能 JSON
告别AI聊着就忘:短期记忆、长期记忆与摘要压缩的配置实践
记录大模型多轮对话记忆配置:滑动窗口保留近期对话、滚动摘要压缩远期内容、长期用户画像跨会话存储,含冲突更新与5个踩坑案例。
|
2月前
|
移动开发 缓存 安全
H5页面分享失效排查:微信JS-SDK签名的配置与验证
本文记录微信JS-SDK签名的完整配置流程:服务号/安全域名/备案三个前置条件、jsapi_ticket换取与SHA1签名算法、url去hash等参数细节、debug验证三步法,并附5个真实踩坑案例。
|
2月前
|
数据采集 人工智能 缓存
告别AI搜索漏抓:robots.txt与AI爬虫管理的配置实践手记
本文记录AI搜索引擎爬虫管理的完整配置流程:GPTBot/OAI-SearchBot/ClaudeBot等爬虫的识别、robots.txt精确规则写法、Sitemap指令、curl模拟UA验证方法,并附5个真实踩坑案例。
|
3月前
|
人工智能 运维 API
Token Plan个人版全解:39元起包月算力与Qwen3.8-Max-Preview实操指南
在大模型调用普及之后,大量独立开发者、在校学生、单人智能体运维从业者长期面临按量计费的痛点:批量代码重构、全天候数字员工挂机、多模态素材批量生成场景下月度算力账单波动剧烈,无法提前规划预算;同时不同AI工具、不同大模型需要单独配置计费凭证,切换基座时流程繁琐,多套密钥难以统一管理。Token Plan个人版包月算力订阅服务针对单人使用场景打造,以预付费包月、统一Credits积分计量为核心,彻底解决算力成本不可控、多工具适配繁琐两大行业难题。
651 1