2023年11月25日发(作者:)

CORS跨域资源共享(Cross-originresoucesharing)

⼀、CORS简介

CORS是⼀个W3C的标准,全称“跨域资源共享”(Cross-origin resource sharing)。

CORS允许浏览器向跨源服务器发出XMLHttpRequest请求,从⽽克服了AJAX只能同源请求的限制。CORS需要浏览器和服务器的共同⽀

持。⽬前所有浏览器都⽀持此功能,IE浏览器版本不得低于IE10。

CORS的整个通信过程都是浏览器⾃动完成的,不需要⽤户参与。对于开发者来说,CORS通信与AJAX同源通信没有差别,代码完全⼀样。

浏览器⼀旦发现AJAX请求跨源,就会⾃动添加⼀些附加的头信息,有时甚⾄会多出⼀次附加请求,但是⽤户不会有感觉,因为过程由浏览器⾃动

完成。实现CORS通信的关键是服务器。只要服务器实现了CORS接⼝,就可以进⾏跨源通信。

⼆、CORS请求

如果指定了Origin请求源,不在服务端的许可范围内,服务器会返回⼀个正常的HTTP响应。浏览器检查响应头没有Access-Control-Allow-

Origin字段,即表⽰服务端不同意此次请求,浏览器抛出异常被XMLHttpRequest的onerror函数捕获。此错误⽆法通过响应状态码进⾏判

断,尽管服务端不同意请求,请求仍正常响应。

2. 同意请求

如果指定的Origin请求源在服务端的许可范围内,请求响应头会附加⼏个字段,字段如下:

Access-Control-Allow-Origin: 127.0.0.1:8082

预检请求(preflight)

预检请求使⽤的请求⽅法是OPTIONS,表⽰这个请求是⽤于询问的。以下列出请求头⾥的相关字段:

Origin

字段必选。预检请求关键字段,表明预检请求的源。

Access-Control-Request-Headers

字段必选。⽤于表明浏览器端的CORS请求时⽤到的HTTP⽅法。

预检请求通过

如果服务端确定了预检请求,作出正常回应,响应投中包含CORS相关字段,响应码⼀般为200。浏览器监听到服务端确定了预检请求则⾃动

发出正式的CORS请求。

预检请求响应