2023-11-13 03:39:41
跨域资源共享(CORS,Cross-Origin Resource Sharing)是一种浏览器安全机制,允许服务器绕过同源策略(SOP)的限制,明确指定哪些外部源可以访问其资源。 它通过在HTTP请求和响应中添加特定标头,实现跨域数据的安全交互。以下是详细说明:
核心背景:同源策略(SOP)CORS通过服务器配置,允许特定外部源突破SOP限制,安全地共享资源(如API、字体、图片等)。例如:
浏览器发起跨域请求:
浏览器自动在请求头中添加Origin字段,标明请求来源(如Origin:
服务器响应检查:
服务器根据CORS策略验证Origin是否合法。若允许,则在响应头中添加:
Access-Control-Allow-Origin:指定允许的源(如Access-Control-Allow-Origin:
其他可选标头(如Access-Control-Allow-Methods、Access-Control-Allow-Headers)进一步限制请求方法或自定义头。
浏览器处理响应:
若响应头中的Origin与请求匹配,浏览器允许应用读取响应数据;否则拦截并报错(如CORS policy: No 'Access-Control-Allow-Origin')。

后端配置CORS:
允许所有源(不推荐):Access-Control-Allow-Origin: *此配置会禁用SOP,增加安全风险,仅适用于公开API。
指定可信源:Access-Control-Allow-Origin:
处理预检请求:对复杂请求,服务器需响应OPTIONS方法,并返回正确的CORS标头。
使用代理服务器:
部署中间层(如Nginx、Node.js代理),将客户端请求转发至目标服务器,并统一添加CORS标头。适用于无法修改目标服务器配置的场景。
请求头:
Origin:标识请求来源。
Access-Control-Request-Method(预检请求):声明后续实际请求的方法。
Access-Control-Request-Headers(预检请求):声明后续请求携带的自定义头。
响应头:
Access-Control-Allow-Origin:允许的源。
Access-Control-Allow-Methods:允许的HTTP方法(如GET, POST)。
Access-Control-Allow-Headers:允许的自定义头(如Authorization)。
Access-Control-Max-Age:预检请求缓存时间(秒)。
通过合理配置CORS,开发者可在保障安全的前提下,实现跨域资源的高效共享。