跨域发生在哪?发生在浏览器收到返回结果,是浏览器主动拦截的,请求和相应已经发生,但最后被拦截了。
某些get请求可能已经生效,这是一个需要注意的细节。
要解决跨域:
- jsonp。后台接收callback名,返回
callback({})
,前端定义function callback(data){}
- 代理服务器,把请求的结果转发到不跨域的代理服务器,可以在开发时候使用
- cors。后端设置允许的请求头。
什么是简单请求?
get post head 动作,无自定义请求头,Content-Type
是下面之一:
- application/x-www-form-urlencoded
- multipart/form-data
- text/plain
可以添加 Access-Control-Allow-Origin: http:a.com
预检请求怎么办?
判断如果是 options,就添加
Access-Control-Aloow-Origin: a.com
Access-Control-Allow-Headers: x-toekn content-type
access-control-alow-methods: put
如果需要cookie
access-control-allow-credentials:true