Ajax跨域CORS

Posted amiezhang

tags:

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

在Ajax2.0中多了CORS允许我们跨域,但是其中有着几种的限制:Origin、Methods、Headers、Credentials

1.Origin

当浏览器用Ajax跨域请求的时候,会带上一个请求头“Origin: 协议://页面域名”,而服务器需要返回一个响应头“Access-Control-Allow-Origin: 协议://对应域名,如果Origin和Access-Control-Allow-Origin不同,浏览器就会报错,服务器返回的信息也会被浏览器禁止使用

 

2.Methods

默认允许跨域的方法只有三种:GET、POST和HEAD

很多时候我们会用到一些Resful接口,method会涉及到PUT、DELETE等等,这个时候CORS要求服务器增加响应头”Access-Control-Allow-Methods: PUT,DELETE“

 

3.Headers

CORS默认有些请求头是不允许的例如自定义请求头 和 content-type

如果我们遇到一些情况需要增加一些自定义的请求头,CORS要求服务器增加响应头”Access-Control-Allow-Headers: 自定义请求头,content-type“

 

4.credentials

CORS默认是不允许跨域发送COOKIES

如果我们想跨域发送COOKIES,我们需要在前端页面设置xhr.withCredentials=true,服务器增加响应头”Access-Control-Allow-Credentials: true“

 

在最新版Chrome,复杂的 CORS 不会发出 OPTIONS "预检"请求,而 Firefox 等其他面对复杂CORS的时候还是会发 OPTIONS

上面 4 中 Access-Control-Allow-xxx Chrome 都兼容 星号(*),但是 Firefox 只允许 Origin 写 星号(*)。

 

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

ajax跨域 (转)

如何解决ajax跨域问题

如何解决ajax跨域问题

mui.ajax 跨域怎么解决的

什么叫ajax跨域访问

mui ajax登录怎么跨域