CORS(Cross-Origin Resource Sharing,跨源资源共享)是一种安全机制,用于允许或限制一个网页从不同的源(域名、协议或端口)请求资源。它是浏览器的一种安全特性,旨在防止恶意网站通过脚本访问用户在其他网站上的数据。
主要概念
-
跨源请求:当一个网页尝试请求与其源不同的资源时,就会发生跨源请求。例如,
https://example.com
请求https://api.example.com
的数据。 -
同源策略:浏览器的同源策略阻止了不同源之间的请求。如果没有 CORS,跨源请求会被浏览器拒绝。
-
CORS 头:CORS 通过 HTTP 头来允许跨源请求。服务器可以在响应中包含特定的 CORS 头,以指示哪些源可以访问资源。
重要的 CORS 头
-
Access-Control-Allow-Origin:指定允许访问资源的源,可以是具体的域名、通配符(
*
)或不允许任何源。 -
Access-Control-Allow-Methods:指定允许的 HTTP 方法(如
GET
、POST
、PUT
等)。 -
Access-Control-Allow-Headers:指定可以在请求中使用的自定义请求头。
-
Access-Control-Allow-Credentials:指示是否允许携带用户凭据(如 Cookie)。
-
Access-Control-Max-Age:指定预检请求(preflight request)的有效时间。
使用场景
-
API 调用:当前端应用需要访问不同域的 RESTful API 时,服务器需要启用 CORS。
-
资源共享:在不同域之间共享字体、图像、样式表等资源。
预检请求
对于某些复杂的请求(如使用 PUT
或 DELETE
方法),浏览器会先发送一个预检请求(OPTIONS),以确定实际请求是否安全。服务器必须正确响应该请求以允许实际请求继续执行。
总结
CORS 提供了一种灵活的方式来安全地共享资源,同时保护用户数据不被恶意网站访问。正确配置 CORS 是确保 Web 应用安全的关键步骤。