目录
跨源资源共享(CORS)策略
场景描述
CORS策略配置
示例请求与响应
简单请求
预检请求
总结
跨源资源共享(CORS)策略
跨源资源共享(CORS,Cross-Origin Resource Sharing)是一种网络安全机制,它允许或拒绝在Web应用中跨源(即不同域名、协议或端口)的HTTP请求。CORS通过服务器设置特定的HTTP响应头来告知浏览器哪些外部域名可以访问哪些资源。下面通过简单例子来说明CORS策略的工作原理
场景描述
假设有两个网站:
- 网站A(
https://website-a.com
):用户正在浏览的网站。 - 网站B(
https://website-b.com
):一个提供数据服务的第三方网站。
用户在使用网站A时,网站A的JavaScript代码需要请求网站B上的某些数据。由于同源策略的限制,浏览器默认会阻止这种跨域请求。但如果网站B的服务器配置了CORS策略,那么网站A的请求就有可能被允许。
CORS策略配置
网站B的服务器需要配置CORS策略,以便允许网站A的请求。这通常通过在响应头中设置Access-Control-Allow-Origin
来实现。
- 允许特定源:
- 网站B的服务器可以在响应头中设置
Access-Control-Allow-Origin: https://website-a.com
,表示只允许来自https://website-a.com
的请求访问其资源。
- 网站B的服务器可以在响应头中设置
- 允许所有源(通常不推荐,出于安全考虑):
- 如果网站B希望允许所有来源的请求,可以设置
Access-Control-Allow-Origin: *
。但请注意,这种做法可能会带来安全风险,因为任何网站都可以请求其资源。
- 如果网站B希望允许所有来源的请求,可以设置
示例请求与响应
简单请求
如果请求是“简单请求”(如使用GET或POST方法,且满足CORS安全列表的头部字段),浏览器会直接发送请求,并在响应中检查Access-Control-Allow-Origin
等CORS响应头。
请求(从网站A到网站B):
GET /data HTTP/1.1 | |
---|---|
Host: website-b.com | |
Origin: https://website-a.com | |
... |
响应(从网站B到网站A):
HTTP/1.1 200 OK | |
---|---|
Content-Type: application/json | |
Access-Control-Allow-Origin: https://website-a.com | |
... | |
{ | |
// 数据内容 | |
} |
预检请求
对于某些“非简单请求”(如使用PUT、DELETE方法,或使用非CORS安全列表的头部字段),浏览器会先发送一个OPTIONS请求的“预检请求”到服务器,询问是否允许该跨域请求。
预检请求(从网站A到网站B):
OPTIONS /data HTTP/1.1 | |
---|---|
Host: website-b.com | |
Origin: https://website-a.com | |
Access-Control-Request-Method: PUT | |
Access-Control-Request-Headers: X-Custom-Header | |
... |
预检响应(从网站B到网站A):
HTTP/1.1 204 No Content | |
---|---|
Access-Control-Allow-Origin: https://website-a.com | |
Access-Control-Allow-Methods: PUT, GET, OPTIONS | |
Access-Control-Allow-Headers: X-Custom-Header | |
Access-Control-Max-Age: 86400 | |
... |
如果预检响应表明请求被允许,浏览器会发送实际的请求。
总结
CORS策略通过服务器配置的HTTP响应头来控制哪些跨域请求被允许。这既保护了网站资源不被恶意访问,也允许了合法的跨域请求,从而促进了Web应用之间的数据共享和交互。在配置CORS策略时,需要权衡安全性和灵活性,避免过度开放资源访问权限。