当前位置: 首页 > news >正文

深入理解同源策略与跨域资源共享(CORS)

深入理解同源策略与跨域资源共享(CORS)

前言

在当今的 Web 开发中,跨域资源请求已成为常见需求。然而,浏览器的同源策略(Same-Origin Policy)作为最基础的安全机制,限制了不同源之间的资源交互。这种限制虽然保障了用户数据安全,但也给开发者带来了挑战。为此,跨域资源共享(CORS)应运而生。本文将深入探讨同源策略的核心原理、CORS 的工作机制,以及如何通过合理配置实现安全的跨域通信。


一、同源策略:Web 安全的基石

同源策略是浏览器最核心的安全策略之一,其核心目标是隔离不同源的资源,防止恶意网站窃取用户数据或发起攻击。

1. 什么是“同源”?

两个 URL 的 协议、主机、端口 完全一致时,才被视为同源。例如:

  • http://example.com/apphttp://example.com/api 同源(协议、主机、端口一致)。
  • https://example.comhttp://example.com 不同源(协议不同)。
  • http://example.com:8080http://example.com:80 不同源(端口不同)。

2. 同源策略的限制范围

同源策略通过以下三个方面保障安全:

  1. DOM 访问限制
    • 禁止 JavaScript 跨域访问其他页面的 DOM,防止恶意脚本窃取敏感信息。
  2. Web 数据限制
    • 限制通过 XMLHttpRequestFetch API 加载跨域资源,防范 CSRF 攻击。
  3. 网络通信限制
    • 阻止跨域请求的响应数据被脚本读取,除非服务器显式允许(如通过 CORS)。

二、跨域资源共享(CORS)

当需要合法跨域请求时,CORS 提供了一种安全可控的解决方案。

1. 简单请求

满足以下条件的请求不会触发预检(Preflight)流程:

  • HTTP 方法:仅限 GETHEADPOST
  • 请求头:仅包含以下标头:
    AcceptAccept-LanguageContent-LanguageContent-Type(值限于 text/plainmultipart/form-dataapplication/x-www-form-urlencoded)。
  • 无自定义标头或流式数据

示例流程

  1. 浏览器直接发送请求,并在 Origin 头中声明来源。
  2. 服务器返回响应,若允许跨域,需设置 Access-Control-Allow-Origin 头。

2. 预检请求(Preflight Request)

非简单请求(如使用 PUTDELETE 方法或自定义标头)会触发预检流程:

  1. 浏览器先发送 OPTIONS 请求,携带以下关键头信息:
    • Origin:请求来源。
    • Access-Control-Request-Method:实际请求的 HTTP 方法。
    • Access-Control-Request-Headers:自定义请求头列表。
  2. 服务器响应预检请求,通过以下头信息声明允许的配置:
    • Access-Control-Allow-Origin:允许的源(如 https://example.com)。
    • Access-Control-Allow-Methods:允许的 HTTP 方法(如 POST, GET)。
    • Access-Control-Allow-Headers:允许的自定义头(如 Content-Type)。
    • Access-Control-Max-Age:预检结果缓存时间(单位:秒)。
  3. 预检通过后,浏览器发送实际请求。

3. 附带凭证的请求

若请求需要携带 Cookie 或认证信息,需注意:

  • 服务器必须设置 Access-Control-Allow-Origin 为具体域名(不能为通配符 *)。
  • 响应头需包含 Access-Control-Allow-Credentials: true

错误示例

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

此时浏览器会拒绝请求,因通配符与凭证不兼容。


三、CORB:跨域数据隔离机制

跨域读取阻止(Cross-Origin Read Blocking, CORB)是浏览器的另一层防护机制,其核心目标是在恶意代码执行前拦截跨域敏感数据(如 JSON、HTML)。例如,即使服务器未正确配置 CORS,CORB 也会阻止脚本读取跨域的 JSON 文件。


四、最佳实践

  1. 服务器配置
    • 避免使用 Access-Control-Allow-Origin: *,明确指定允许的源。
    • 限制 Access-Control-Allow-MethodsAccess-Control-Allow-Headers 的范围。
  2. 开发注意事项
    • 优先使用简单请求,减少预检开销。
    • 敏感接口需启用 HTTPS 并严格校验来源。

总结

同源策略是浏览器安全的核心保障,而 CORS 机制在确保安全的前提下,为合法跨域请求提供了灵活的支持。通过理解简单请求与预检请求的区别、合理配置响应头,开发者可以高效解决跨域问题,同时避免安全风险。未来,随着 Web 应用的复杂度提升,掌握这些安全机制将变得愈发重要。

扩展思考

  • 如何结合 OAuth2 实现安全的跨域认证?
  • 在微服务架构下,如何统一管理跨域策略?

希望本文能为你解开跨域问题的迷雾,助力构建更安全的 Web 应用!

相关文章:

  • word插入APA格式的参考文献
  • Deepseek 生成新玩法:从文本到可下载 Word 文档?思路与实践
  • JVM 自动内存管理
  • 弹性盒子布局
  • 预训练大模型与元训练大模型在医疗AI项目中的选型对比分析
  • DELL R740服务器闪黄灯不开机故障案例
  • CSdiy java 05
  • 除了Object.freeze(),JavaScript中还有哪些优化性能的对象限制方法?
  • 蓝牙BLE
  • 蓝桥杯 18. 机器人繁殖
  • whois为什么有时会返回两个不同的域名状态
  • 【权限模型】RBAC模型详解
  • Spring Security源码解析
  • DeepSeek+Dify之三工作流引用知识库案例
  • 解锁服务器迁移的未来:《2025 服务器迁移效率白皮书》(附下载)
  • 安卓开发学习随记
  • Redis 常见问题深度剖析与全方位解决方案指南
  • 「地平线」创始人余凯:自动驾驶尚未成熟,人形机器人更无从谈起
  • 【Java学习笔记】传参机制
  • 仙宫云ComfyUI —【Wan2.1】AI视频生成部署
  • 众信旅游:去年盈利1.06亿元,同比增长228.18%
  • 伊朗港口爆炸已致46人死亡
  • 多地征集农村假冒伪劣食品违法线索,全链条整治“三无”产品
  • 申花四连胜领跑中超,下轮榜首大战对蓉城将是硬仗考验
  • 建投读书会·东西汇流|全球物品:跨文化交流视域下的明清外销瓷
  • 新闻1+1丨应对外部冲击,中央政治局会议释放哪些信号?