惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
J
Java Code Geeks
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Check Point Blog
月光博客
月光博客
腾讯CDC
Engineering at Meta
Engineering at Meta
博客园 - Franky
Vercel News
Vercel News
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
Microsoft Security Blog
Microsoft Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
雷峰网
雷峰网
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
GbyAI
GbyAI
B
Blog
Hugging Face - Blog
Hugging Face - Blog
T
Tailwind CSS Blog

虹墨空间站

联想拯救者 Y700 四代(TB322FC)刷入澎湃 OS 3 教程 各种 AI 工具来来回回切模型太麻烦?Bifrost 自建 AI 网关,实现模型切换自由 垃圾京东云 浏览器直接访问正常,过了负载均衡就崩了?只因响应头里多了个空格 Claude Code 怎样快速消耗 token 去掉高德地图开屏广告 解决 Claude Code 安装或更新后 claude.exe 无法运行、claude native binary not installed Windows 11 26H1 显示所有托盘图标 OpenClaw 安装与配置 盘点手里的电子产品传家宝 基于 7z 的 NAS 到网盘备份解决方案,支持增量、分卷、加密、压缩 卸载百度网盘智能看图 CDN 方式引入 Monaco Editor 在线工具 - 富文本转 Markdown 2025 年了,安卓平板上什么第三方九键输入法最好用? 鸿蒙 PC 编译运行 Electron 应用 bat 脚本打印输出彩色文字 Android 强制锁定屏幕旋转方向
跨域预检请求失败问题分析
iMaeGoo · 2026-08-19 · via 虹墨空间站

问题描述

浏览器发送 OPTIONS 预检请求后,Nginx 返回了 204 响应,且 Access-Control-Allow-Headers 设置为 *,但浏览器仍然报错:

1
2
3
Access to XMLHttpRequest at 'http://.../api/...'
from origin 'http://...' has been blocked by CORS policy:
Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.

根因分析

W3C Fetch 规范限制

根据 W3C Fetch Standard 规范:

When credentials mode is “include”(即 Access-Control-Allow-Credentials: true),the following headers must NOT use wildcard *:

  • Access-Control-Allow-Origin
  • Access-Control-Allow-Headers
  • Access-Control-Allow-Methods

简而言之:Access-Control-Allow-Credentials: true 与通配符 * 互斥。

问题响应示例

1
2
3
Access-Control-Allow-Credentials: true    ← 要求明确列出允许的值
Access-Control-Allow-Headers: * ← 通配符,浏览器直接忽略并拒绝
Access-Control-Allow-Methods: * ← 同上

浏览器检测到 credentials 模式下 Allow-Headers*,认为这是一个无效的 CORS 响应,因此拦截了实际请求。

修复方案

将 Nginx 配置中的通配符替换为显式列举的值:

修改前

1
2
add_header Access-Control-Allow-Methods "*" always;
add_header Access-Control-Allow-Headers "*" always;

修改后

1
2
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS, PATCH, HEAD" always;
add_header Access-Control-Allow-Headers "content-type, authorization, x-requested-with, x-custom-header, accept, origin" always;

参考资料