赞
踩
CORS
需要浏览器和后端同时支持。IE 8
和 9
需要通过 XDomainRequest
来实现。CORS
通信,实现 CORS
通信的关键是后端。只要后端实现了 CORS
,就实现了跨域。Access-Control-Allow-Origin
就可以开启 CORS
。 该属性表示哪些域名可以访问资源,如果设置通配符则表示所有网站都可以访问资源。 虽然设置 CORS
和前端没什么关系,但是通过这种方式解决跨域问题的话,会在发送请求时出现两种情况,分别为简单请求和复杂请求。简单请求
以
Ajax
为例,当满足以下条件时,会触发简单请求
使用下列方法之一:
GET
HEAD
POST
Content-Type
的值仅限于下列三者之一:
text/plain
multipart/form-data
application/x-www-form-urlencoded
请求中的任意
XMLHttpRequestUpload
对象均没有注册任何事件监听器;XMLHttpRequestUpload
对象可以使用XMLHttpRequest.upload
属性访问
复杂请求
对于复杂请求来说,首先会发起一个预检请求,该请求是
option
方法的,通过该请求来知道服务端是否允许跨域请求。
对于预检请求来说,如果你使用过 Node
来设置 CORS
的话,可能会遇到过这么一个坑。
以下以 express
框架举例
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*')
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS')
res.header(
'Access-Control-Allow-Headers',
'Origin, X-Requested-With, Content-Type, Accept, Authorization, Access-Control-Allow-Credentials'
)
next()
})
Authorization
字段,没有的话就会报错。next
方法,因为预检请求并不包含 Authorization
字段,所以服务端会报错。想解决这个问题很简单,只需要在回调中过滤
option
方法即可
res.statusCode = 204
res.setHeader('Content-Length', '0')
res.end()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。