原因:
- 浏览器限制
- 跨域(协议、域名、端口)
- XMR(XMLHttpRequest请求)
解决方法:
-
浏览器:命令行参数启动,带上参数--disable-web-security
-
XHR:使用JSONP,后台服务器需要改动。请求类型(type)为script,返回类型为javascript。原理为动态创建script标签,在script中发送请求。JSONP弊端:服务器需要改动代码支持,只支持GET方法,发送的不是XHR请求(没有相关事件)。
-
跨域:被调用方支持跨域:增加Access-Control-Allow-Origin的header(CORS,带Cookie时必须是全匹配,不能是*),调用方隐藏跨域:使用代理服务器转发请求。
浏览器如何判断请求是跨域
简单请求(先执行,后判断):方法为GET、HEAD、POST,请求header里面无自定义头,Content-Type为以下几种:text/plain、multipart/form-data、application/x-www-form-urlencoded。
非简单请求(先发送预检命令,通过后再发送请求):put,delete方法的ajax请求,发送json格式的ajax请求,带自定义头的ajax请求。
网友评论