CORS跨域请求总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CORS跨域请求总结相关的知识,希望对你有一定的参考价值。

CORS跨域请求分为简单请求和复杂请求。

1. 简单请求:

满足一下两个条件的请求。

(1) 请求方法是以下三种方法之一:

  • HEAD
  • GET
  • POST

(2)HTTP的头信息不超出以下几种字段:

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type:只限于三个值application/x-www-form-urlencodedmultipart/form-datatext/plain

2. 复杂请求:

非简单请求就是复杂请求。

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

非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。

预检请求为OPTIONS请求,用于向服务器请求权限信息的。

预检请求被成功响应后,才会发出真实请求,携带真实数据。

3. CORS与cookies:

上面说到,CORS请求默认不发送Cookie和HTTP认证信息。如果要把Cookie发到服务器,一方面要服务器同意,指定Access-Control-Allow-Credentials字段。


Access-Control-Allow-Credentials: true

另一方面,开发者必须在AJAX请求中打开withCredentials属性。


var xhr = new XMLHttpRequest();
xhr.withCredentials = true;//XMLHttpRequest level2才有withCredentials属性

4. 减少预检请求次数

服务端设置Access-Control-Max-Age可以将预检请求进行客户端缓存,减少请求次数

 

具体可以参考:http://www.ruanyifeng.com/blog/2016/04/cors.html


以上是关于CORS跨域请求总结的主要内容,如果未能解决你的问题,请参考以下文章

线上问题CORS跨域问题总结

AJAX学习笔记2:XHR实现跨域资源共享(CORS)以及和JSONP的对比

CORS 跨域请求

Javascript Ajax总结——跨域资源共享

[转] 利用CORS实现跨域请求

利用CORS实现跨域请求(转载)