← 返回
安全合规
中文
CORS
Configure Cross-Origin Resource Sharing correctly to avoid security issues and debugging pain.
正确配置跨域资源共享,避免安全隐患与调试困扰。
ivangdavila
安全合规
clawhub
v1.0.0 1 版本 99908.4 Key: 无需
#latest
概述
Preflight Triggers
- Any header except: Accept, Accept-Language, Content-Language, Content-Type (with restrictions)
- Content-Type other than: application/x-www-form-urlencoded, multipart/form-data, text/plain
- Methods: PUT, DELETE, PATCH, or any custom method
- ReadableStream in request body
- Event listeners on XMLHttpRequest.upload
- One trigger = preflight; simple requests skip OPTIONS entirely
Credentials Mode
Access-Control-Allow-Origin: * incompatible with credentials—must specify exact originAccess-Control-Allow-Credentials: true required for cookies/auth headers- Fetch:
credentials: 'include'; XHR: withCredentials = true - Without credentials mode, cookies not sent even to same origin for cross-origin requests
Wildcard Limitations
doesn't match subdomains—.example.com is invalid, not a pattern- Can't use
* with credentials—specify origin dynamically from request Access-Control-Allow-Headers: * works in most browsers but not all—list explicitly for compatibilityAccess-Control-Expose-Headers: * same issue—list headers you need to expose
Origin Validation
- Check Origin header against allowlist—don't reflect blindly (security risk)
- Regex matching pitfall:
example.com matches evilexample.com—anchor the pattern null origin: sandboxed iframes, file:// URLs—usually reject, never allow as trusted- Missing Origin header: same-origin or non-browser client—handle explicitly
Vary Header (Critical)
- Always include
Vary: Origin when response depends on origin—even if you allow only one - Without Vary: CDN/proxy caches response for one origin, serves to others—breaks CORS
- Add
Vary: Access-Control-Request-Headers, Access-Control-Request-Method for preflight caching correctness
Exposed Headers
- By default, JS can only read: Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Pragma
- Custom headers invisible to JS unless listed in
Access-Control-Expose-Headers X-Request-ID, X-RateLimit-*, etc. need explicit exposure—common oversight
Preflight Caching
Access-Control-Max-Age: 86400 caches preflight for 24h—reduces OPTIONS traffic significantly- Chrome caps at 2 hours; Firefox at 24 hours—values above are silently reduced
- Cached per origin + URL + request characteristics—not globally
- Set to 0 or omit during development—caching hides config changes
Debugging
- CORS error in browser = request reached server and came back—check server logs
- Preflight failure: server must return 2xx with CORS headers on OPTIONS—404/500 = failure
- Opaque response in fetch:
mode: 'no-cors' succeeds but response is empty—usually not what you want - Network tab shows CORS errors; Console shows which header is missing
Common Server Mistakes
- Only setting CORS headers on main handler, not OPTIONS—preflight fails
- Setting headers after error response—CORS headers missing on 4xx/5xx breaks error handling
- Proxy stripping headers—verify headers reach client, not just that server sets them
Access-Control-Allow-Origin: "*", "https://example.com"—must be single value, not list
Security
- Don't reflect Origin header blindly—validate against allowlist first
- Private Network Access: Chrome requires
Access-Control-Allow-Private-Network: true for localhost access from public web - CORS doesn't prevent request from being sent—just blocks response reading; server still processes it
- Sensitive endpoints: don't rely on CORS alone; use authentication + CSRF tokens
版本历史
共 1 个版本
-
v1.0.0
当前
2026-03-29 02:59 安全 安全
安全检测
腾讯云安全 (Sanbu)
安全,无风险
查看报告
🔗 相关推荐
ai-intelligence
ivangdavila
自我反思+自我批评+自我学习+自组织记忆。智能体评估自身工作、发现错误并持续改进。
★ 1,358
📥 318,377
productivity
ivangdavila
创建、检查和编辑 Microsoft Word 文档及 DOCX 文件,支持样式、编号、修订记录、表格、分节符及兼容性检查等功能。
★ 438
📥 147,666
security-compliance
thomaslwang
MoltGuard — OpenClaw 安全守卫,由 OpenGuardrails 提供。安装 MoltGuard,保护您和您的用户免受提示注入、数据泄露和恶意攻击。
★ 116
📥 30,720