跨域资源共享(CORS)是一种允许浏览器在遵循同源策略的前提下,实现跨域访问资源的机制。
一、同源策略基础:同源策略是浏览器的一项重要安全机制,它规定了一个源(协议、域名、端口)加载的资源,在默认情况下,是不能访问另一个源的资源的。例如,在`http://example.com
`这个源下的页面,无法直接访问`http://another.com
`源下的接口或资源。
1. 源的构成:源由协议、域名和端口三部分组成。只有当这三部分都完全相同时,才被认为是同源。比如`http://www.example.com:80
`和`http://www.example.com:81
`就不是同源,因为端口不同。
2. 同源策略的作用:它有效地阻止了恶意网站对其他网站资源的非法访问,保护了用户信息和网站安全。
二、CORS实现机制:为了在不破坏同源策略的前提下实现跨域访问,CORS引入了额外的HTTP头信息来进行跨域请求的控制和验证。
1. 简单请求:对于符合一定条件的简单请求,浏览器会自动在请求头中添加`Origin`字段,该字段的值是发起请求的源。服务器接收到请求后,如果允许该跨域请求,会在响应头中添加`Access-Control-Allow-Origin`字段,其值可以是具体的源(如`http://example.com
`),表示允许该源访问;也可以是`*`,表示允许所有源访问。例如,浏览器请求`http://example.com/api/data
`,服务器响应头中`Access-Control-Allow-Origin: http://example.com
`,浏览器就知道该跨域请求被允许了。
2. 非简单请求:当请求不符合简单请求的条件时(如请求方法为PUT、DELETE等,或者包含自定义请求头),浏览器会先发送一个预检请求(OPTIONS请求)。预检请求的目的是询问服务器是否允许该跨域请求。服务器会根据预检请求的信息进行验证,如果允许,会在响应头中返回`Access-Control-Allow-Origin`、`Access-Control-Allow-Methods`(允许的请求方法)、`Access-Control-Allow-Headers`(允许的请求头)等字段。浏览器在收到允许的预检响应后,才会发送实际的请求。
CORS通过这种机制,在保证同源策略安全的基础上,实现了跨域资源的共享,为现代Web应用的跨域交互提供了支持。