跨域访问控制(Cross-Origin Resource Sharing,CORS)指的是在浏览器端执行AJAX等操作时,对于不同源(协议、域名、端口)的请求进行限制和控制的一种技术。CORS技术主要用于保护Web应用程序的安全性,防止恶意攻击向其发送请求。
CORS通过HTTP头来传递信息,告知浏览器是否允许当前网页发起跨域请求,而HTTP头中的信息是由服务器端来设置的。当浏览器收到服务器返回的HTTP头信息中包含Access-Control-Allow-Origin字段,且该字段指示了允许跨域的源时,就会解除浏览器的同源策略限制,允许跨域访问。
下面是一些CORS中常用的HTTP头信息:
此外,CORS还有一些关键点需要注意:
1.需要在服务端进行设置
CORS机制是由HTTP头信息来实现的,因此必须在服务端进行设置。服务器在接收到客户端的请求后,需要在HTTP头中设置Access-Control-Allow-Origin字段,以及其他一些字段来告知浏览器是否允许跨域访问。如果服务端没有设置相关的HTTP头信息,那么客户端的跨域请求就会被浏览器所拒绝。
2.浏览器自动发送预请求
如果浏览器对服务器的请求跨域,会先发送一个OPTIONS请求,称之为"预请求"。预请求的目的是帮助服务器判断是否接受真正的请求。如果服务器返回的HTTP头信息中含有Access-Control-Allow-Origin字段,且该字段指定了允许跨域的源,则浏览器才会发送真正的请求。
3.请求类型和请求头限制
跨域访问时,并不是所有的请求类型和请求头都可以被允许的。服务器端需要在设置Access-Control-Allow-Methods和Access-Control-Allow-Headers等字段去告知浏览器所允许的请求类型和请求头。
4.跨域Cookie
在跨域访问时,如果需要将Cookie等凭据信息发给服务器端的话,必须在服务器端设置响应头Access-Control-Allow-Credentials: true,同时还需要在客户端设置XMLHttpRequest对象的withCredentials属性为true(在jquery中则为:$.ajax({xhrFields: { withCredentials: true }}))。
总之,CORS技术是保护Web应用程序安全的重要技术之一。在实际开发中,我们应该合理地设置HTTP头信息,以达到保护Web应用程序的目的。