什么是cors?原理是什么?

CORS(Cross-Origin Resource Sharing)是一种浏览器技术的规范,也被称为跨域资源共享。它允许浏览器向跨源服务器发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。CORS需要浏览器和服务器同时支持,所有现代浏览器都支持此功能,但IE浏览器不能低于IE10。

CORS的原理可以概括如下:

  1. 请求发出方(浏览器)
    • 当浏览器发出一个请求时,它会在请求头中携带一个Origin字段,这个字段指明了请求的来源(协议 + 域名 + 端口)。
  2. 服务器端
    • 当服务器接收到这个请求时,它会检查Access-Control-Allow-Origin这个响应头。
    • 如果服务器允许这个请求,它会返回一个包含Access-Control-Allow-Origin的响应头,这个头信息会指明哪些域可以访问该资源,以及是否需要凭据(如Cookie)。
    • 如果请求的域不在服务器的许可范围内,服务器会返回一个正常的HTTP响应,但不含Access-Control-Allow-Origin字段,此时浏览器会抛出一个错误,被XMLHttpRequest的onerror回调函数捕获。
  3. 浏览器端
    • 如果Access-Control-Allow-Origin响应头允许请求来自指定域,并且响应不包含Vary: Origin头,浏览器将接受响应。
    • 否则,浏览器将拒绝响应,不允许其他网站访问资源。

CORS的两种请求类型:

  • 简单请求(Simple Request)
    • 请求方法是HEAD、GET、POST中的一种。
    • HTTP的头信息不超出特定的字段范围,如Accept、Accept-Language、Content-Language、Last-Event-ID、Content-Type(只限于三个值:application/x-www-form-urlencoded、multipart/form-data、text/plain)。
    • 对于简单请求,浏览器直接发出CORS请求,并在头信息中增加一个Origin字段。
  • 非简单请求(Not-So-Simple Request)
    • 不满足简单请求条件的请求都属于非简单请求。
    • 对于非简单请求,浏览器会先发出一个预检请求(OPTIONS请求),询问服务器是否允许这个跨域请求。预检请求会包含一些额外的头信息,如Access-Control-Request-MethodAccess-Control-Request-Headers,用于告知服务器实际的请求方法和将要使用的头信息。
    • 服务器在接收到预检请求后,会检查请求头中的Origin字段,并决定是否允许这个跨域请求。如果允许,服务器会返回一个包含Access-Control-Allow-OriginAccess-Control-Allow-Methods等响应头的预检响应。
    • 浏览器在接收到预检响应后,会判断服务器是否允许这个跨域请求。如果允许,浏览器会发出实际的跨域请求。

CORS的优势在于它可以让所有现代浏览器都支持跨域请求,从而为用户提供更好的体验。然而,需要注意的是,某些古老的浏览器可能不支持CORS或支持有限。

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值