Ajax为啥不能跨域?
是因为存在SOP(同源策略)
如果Ajax请求的资源如果不满足SOP,浏览器就是禁用掉该请求。
Ajax跨域请求是被阻止的?
答案:浏览器
Ajax请求的过程:
Ajax会将请求提交到浏览器,浏览器再与服务器通信。
服务器将结果返回给浏览器,浏览器会判断服务器响应的数据和发出的请求是不是在同一个域下。
如果是,浏览器会将结果转交给Ajax请求;如果不是,浏览器会丢弃该响应数据。
所以,Ajax跨域是浏览器的一种自律行为。
如果,要解决Ajax跨域,需要服务器做出一个声明,告诉浏览器,尽管不在同一个域下,但这个请求我能接受,你(浏览器)放他过去吧。
解决方法(Nodejs例子):
//设置允许所有源都可以请求数据
res.setHeader('access-control-allow-origin', '*');
另外,如果需要跟安全,防止任何源都能请求服务器
//定义允许的请求源
let allowOrigin={
'http://localhost': true
}
http.createServer((req, res)=>{
//通过req.headers获得请求源origin,检查是否在允许列表,如果存在,则给发送个*
let {origin}=req.headers;
if(allowOrigin[origin]){
res.setHeader('access-control-allow-origin', '*');
}
}).listen(8080);