利用CORS实现跨域

CORS(cross origin resource sharing)是w3c制定的一套标准,使得ajax发出的请求可以跨域,跨域指的是访问不同ip地址和端口号的另一网站。在此之前想通过ajax实现跨域只能借src或者jsonp,但也只能发送get请求,而CORS这套跨域资源共享标准,实现了真正意义上的跨域,只要满足CORS条件,任何请求方法都能成功实现跨域。

CORS的基本原理是浏览器发送跨域请求时带一个特定的请求头询问服务器能否跨域,服务器返回特定的响应头回复浏览器让不让跨。

CORS请求分两种形式,第一种是简单请求,当请求方法是get或post或head其中之一,且content-type是application/x-www-form-urlencoded或multipart/form-data或text-plain其中之一,且请求头仅包含accept,accept-language,content-language,content-tpye时,这个CORS请求就是简单请求。发送简单请求时会在请求头中加上Origin这个特定的头,里面的值表明自己来自哪个域。服务器在接收到该请求后如果判断接收此域,则在返回的响应头中添加access-control-allow-origin(服务器接受的所有域),access-control-allow-credentials(是否接受cookies),access-control-expose-headers(允许客户端访问的响应头)。

若不满足简单请求的任一条件,则该CORS就是预检请求(也叫复杂请求)。预检请求指的是浏览器先发一个试探性的请求询问服务器是否允许自己跨域,若服务器同意则再发送正式的请求。下面讲一下具体流程。首先浏览器发送一个option请求,携带三个请求头,分别是origin(表面自己来自那个域),access-control-request-method(此次请求将使用的方法),access-control-request-method(此次请求将使用的头)。若服务器收到option请求后同意跨域,则在返回的响应头中添加access-control-allow-origin(服务器接受的所有域),access-control-allow-methods(服务器接受的所有请求方法),access-control-allow-headers(服务器所有支持的头部),access-control-allow-credentials(是否接受cookies),access-control-max-age(同意请求后最大保持时间,以秒为单位)。接着浏览器会发送主请求,这次只要携带origin这个请求头就行了,服务器会在返回的响应头中添加access-control-allow-origin表示允许跨域。

猜你喜欢

转载自blog.csdn.net/qq_43435274/article/details/103534172