📅  最后修改于: 2023-12-03 14:49:08.552000             🧑  作者: Mango
CORS(Cross-Origin Resource Sharing跨域资源共享)是一个浏览器的安全机制,主要用于在浏览器中跨域访问资源,注意是在浏览器中。通俗来说,就是一个网站的JavaScript进行跨域访问其他域名的资源。
同源策略指在浏览器中,只有同源的JavaScript脚本才能相互调用,同源条件包括:协议、域名、端口号必须一致;不同源的JavaScript脚本不能相互调用。同源策略的存在主要是为了保护本地的用户信息安全,防止恶意的跨站脚本攻击(XSS攻击)。
CORS在浏览器中通过三个HTTP响应头实现跨域访问:
当浏览器发现一个请求要跨域时,需要向对应的服务器发送一个预处理请求。服务器则把预处理请求的响应头上增加一个Access-Control-Allow-Origin来授权跨域访问。例如:
Access-Control-Allow-Origin: http://localhost:3000
为了保证跨域请求能够正常进行,需要告诉浏览器支持哪些HTTP头部。服务器可以在响应头Access-Control-Allow-Headers中告诉浏览器支持哪些HTTP头部,例如:
Access-Control-Allow-Headers: X-Requested-With, Content-Type, Authorization
有时,用户需要向服务器提交一个非GET请求,此时需要在响应头Access-Control-Allow-Methods中告诉浏览器支持哪些HTTP方法。例如:
Access-Control-Allow-Methods: POST, GET, OPTIONS
相比于JSONP,CORS的兼容性更好。但是,JSONP可以在所有浏览器上运行,而CORS需要一些特殊的配置,例如服务器端需要设置响应头,客户端需要使用XMLHttpRequest对象(IE浏览器需要使用XDomainRequest对象)发送请求。
跨域通常指的是浏览器的跨域限制,服务器端并没有限制。因此,使用CORS可以避免一些服务器端的限制,例如不需要对服务器做任何修改,不需要使用代理服务器等。
CORS是一种浏览器的跨域访问机制,通过设置HTTP响应头Access-Control-Allow-Origin、Access-Control-Allow-Headers和Access-Control-Allow-Methods实现。相比于JSONP,CORS的兼容性更好,但需要特殊配置。使用CORS可以避免一些服务器端的限制。