CORS(跨域资源共享)

简介

跨域资源共享的主要思想就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定响应式是成功还是失败,它允许了浏览器向跨源服务器发送请求,克服了同源的限制。

CORS需要浏览器和服务器同时支持,所有浏览器目前都支持,IE需要10以上。在整个通信过程中,不需要用户参与,都是由浏览器自动完成。对开发者来说,CORS和普通的ajax同源请求一样,代码都一模一样,所以实现CORS通信的关键是服务器,只要服务实现了CORS接口或约定,就可以跨源通信。

CORS的基本流程

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。
浏览器发出CORS简单请求,只需要在头信息之中增加一个Origin字段。Origin字段用来说明,本次请求来自哪个源(协议+域名+端口)。服务器根据这个值,决定是否同意这次请求。
如果Origin制定的源不在许可范围之内,服务器会返回一个正常的HTTP回应。浏览器发现Http Response头信息中没有包含Access-Control-Allow-Origin字段,就判断出错并抛出一个错误,被XMLHttpRequest的onerror回调函数捕获。注意,这种错误无法通过状态码识别,因为HTTP回应的状态码有可能是200.

只要同时满足以下两大条件,就属于简单请求。
1) 请求方法是以下三种方法之一:
HEAD
GET
POST
2)HTTP的头信息不超出以下几种字段
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain

非简单请求是对服务器有特殊要求的请求,比如请求方法是PUT/DELETE,或者Content-Type字段的类型是application/json。

浏览器发出CORS非简单请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。

和Jsonp的区别

CORS与Jsonp使用目的相同,但是Jsonp只支持GET请求,CORS支持所有类型的HTTP请求。JSONP的有时在于支持老式浏览器,以及向不支持CORS的网站请求数据

引用链接:https://www.jianshu.com/p/52bf8f5b8432

猜你喜欢

转载自blog.csdn.net/kjnsfijglqj/article/details/81783194