跨源资源共享(CORS)策略

2024-07-24 09:01:34 浏览数 (1)

目录

跨源资源共享(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来实现。

  1. 允许特定源
    • 网站B的服务器可以在响应头中设置Access-Control-Allow-Origin: https://website-a.com,表示只允许来自https://website-a.com的请求访问其资源。
  2. 允许所有源(通常不推荐,出于安全考虑):
    • 如果网站B希望允许所有来源的请求,可以设置Access-Control-Allow-Origin: *。但请注意,这种做法可能会带来安全风险,因为任何网站都可以请求其资源。

示例请求与响应

简单请求

如果请求是“简单请求”(如使用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策略时,需要权衡安全性和灵活性,避免过度开放资源访问权限。

0 人点赞