1 跨域问题:
只要协议、域名、端口有任何一个不同,都被当作是不同的域浏览器不允许当前页面的所在的源去请求另一个源的数据。源的定义:协议+二级域名+端口确定一个源。
跨域是指的浏览器跨域,由于同源策略的限制,无法共享不同域名的资源,同时也限制了DOM的读取。要强调的是,跨域的问题是存在于浏览器上,因为对于跨域的请求其实是可以发送,服务器也可以通过接受请求并正常返回结果,只是结果被浏览器拦截。
2 为什么限制跨域
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
比如说有两个网站 A和B。
你是A网站的管理员,你在A网站有一个权限是删除用户,比如说这个过程只需用你的身份登陆并且POST数据到http://a.com/delUser,就可以实现删除操作。
现在说B网站,B网站被攻击了,别人种下了恶意代码,你点开的时候就会模拟跨域请求,如果是针对你,那么就可以模拟对A站的跨域请求,恰好这个时候你已经在A站登陆了。那么攻击者在B站内通过脚本,模拟一个用户删除操作是很简单的。
你是A网站的管理员,你在A网站有一个权限是删除用户,比如说这个过程只需用你的身份登陆并且POST数据到http://a.com/delUser,就可以实现删除操作。
现在说B网站,B网站被攻击了,别人种下了恶意代码,你点开的时候就会模拟跨域请求,如果是针对你,那么就可以模拟对A站的跨域请求,恰好这个时候你已经在A站登陆了。那么攻击者在B站内通过脚本,模拟一个用户删除操作是很简单的。
3 跨域资源共享 CORS
它允许浏览器向跨源服务器,发出
XMLHttpRequest
请求,从而克服了AJAX只能同源使用的限制。CORS需要浏览器和服务器同时支持, 目前,所有浏览器都支持该功能。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。