CORS(跨域资源共享)和SOP(同源策略)不是同一个东西,但它们紧密相关,并且常常一起讨论,因为 CORS 是为了解决同源策略带来的跨域问题而引入的。
同源策略(Same-Origin Policy)
同源策略是一种浏览器安全机制,用于限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。同源策略的核心是确保不同源之间的资源不会互相干扰,从而保护用户的安全。
-
同源定义:
- 协议(protocol)、主机(host)和端口(port)三者必须完全相同,才被认为是同源。
- 例如,
http://example.com/page1
和http://example.com/page2
是同源的,但http://example.com
和https://example.com
不是同源的(协议不同),http://example.com
和http://sub.example.com
也不是同源的(主机不同)。
-
同源策略的限制:
- JavaScript 不能直接访问不同源的页面内容。
- AJAX 请求不能发送到不同源的服务器。
- Cookie、LocalStorage 等存储机制也有同源限制。
CORS(跨域资源共享)
CORS 是一种机制,它允许服务器在响应中添加特定的 HTTP 头,从而允许浏览器放宽同源策略的限制,使得不同源的网页可以请求和访问资源。
-
CORS 的工作原理:
- 预检请求(Preflight Request):对于复杂请求(如带有自定义头的请求、PUT 或 DELETE 请求),浏览器会先发送一个 OPTIONS 请求到服务器,询问服务器是否允许实际的请求。
- 简单请求(Simple Request):对于简单请求(如 GET、POST 请求,且没有自定义头),浏览器会直接发送请求,但在请求头中会包含
Origin
字段,表明请求来自哪个源。 - 服务器响应:服务器在响应中添加
Access-Control-Allow-Origin
头,表示允许哪些源访问资源。如果源不在允许列表中,浏览器会阻止请求。
-
CORS 的优点:
- 允许跨域请求,提高前后端分离开发中的灵活性。
- 增强了安全性,因为服务器可以控制哪些源可以访问资源。
总结
- 同源策略:是一种浏览器安全机制,限制不同源之间的资源交互。
- CORS:是一种解决同源策略限制的机制,允许服务器通过特定的 HTTP 头放宽同源策略,使得跨域请求成为可能。
虽然它们不是同一个东西,但 CORS 是为了解决同源策略带来的跨域问题而设计的。理解它们之间的关系和区别,有助于更好地进行 Web 开发和安全配置。