2020-11-09 18:26:16
CORS(跨源资源共享)是一种由浏览器实现的安全机制,用于控制不同源的Web应用程序之间的资源访问权限,允许或限制跨域请求以保障数据安全。
核心背景与目的浏览器默认执行同源策略,阻止网页向不同域(协议、域名、端口任一不同)发起请求,防止恶意网站窃取敏感数据。但现代Web开发常需跨域获取资源(如API调用、CDN内容加载),CORS通过标准化流程在安全前提下实现可控的跨域通信。
工作原理当网页向不同域发起请求时,浏览器会检查服务器返回的CORS响应头,决定是否允许请求。例如:
前端托管在
常见应用场景
第三方API访问:如身份验证、支付、社交媒体集成等依赖外部API的服务。
前后端分离架构:前端与后端部署在不同域或子域时需CORS实现通信。
CDN资源加载:主站从托管在不同源的CDN请求静态资源(如图片、JS文件)。
关键响应头参数
Access-Control-Allow-Origin:指定允许访问的源,可为具体域名(如
Access-Control-Allow-Methods:声明允许的HTTP方法(如GET, POST, PUT)。
Access-Control-Allow-Headers:列出请求可携带的自定义标头(如X-Custom-Header)。
Access-Control-Allow-Credentials:是否允许携带凭据(如Cookie),需设为true时Allow-Origin不能为*。
Access-Control-Expose-Headers:指定浏览器可暴露给客户端的额外响应头(默认仅公开Cache-Control等有限标头)。
Access-Control-Max-Age:缓存预检请求结果的时长(秒),减少重复预检以提升性能。
预检请求(Preflight Request)对非简单请求(如含自定义头或使用PUT/DELETE方法),浏览器会先发送OPTIONS方法预检请求,确认服务器是否允许实际请求。服务器需通过预检响应头(如Allow-Methods)明确授权,浏览器才会继续发送实际请求。
何时需要配置CORS
前后端分离部署在不同域或端口。
调用外部API或从CDN加载资源。
需携带凭据(如Cookie)的跨域请求。
需自定义请求头或使用非简单HTTP方法。
安全注意事项
避免滥用通配符*,仅允许可信来源。
结合身份验证令牌、CSRF防护等机制增强安全性。
定期审计CORS配置,防止配置错误导致数据泄露。
结论CORS是现代Web开发中平衡安全性与功能性的核心机制。正确配置CORS头可实现跨域资源的安全共享,支持API集成、前后端分离等场景,同时需严格遵循安全原则以防范潜在风险。开发者需深入理解其原理与配置细节,确保应用在跨域场景下既功能完备又安全可靠。