跨域是一种浏览器同源安全策略,即浏览器单方面限制脚本的跨域访问。
认识跨域
很多人误认为资源跨域时无法请求,实际上,通常情况下请求是可以正常发起的(注意,部分浏览器存在特例),后端也正常进行了处理,只是在返回时被浏览器拦截,导致响应内容不可使用。可以论证这一点的著名案例就是CSRF跨站攻击。
此外,我们平常所说的跨域实际上都是在讨论浏览器行为,包括各种WebView容器等(其中,以
XmlHttpRequest 的使用为主)。由于JavaScript 运行在浏览器之上,所以Ajax的跨域成为“痛点”。实际上,不仅不同站点间的访问存在跨域问题,同站点间的访问可能也会遇到跨域问题,只要请
求的URL与所在页面的URL首部不同即产生跨域,例如:
◎ 在http://a.baidu.com下访问https://a.baidu.com资源会形成协议跨域。
◎ 在a.baidu.com下访问b.baidu.com资源会形成主机跨域。
◎ 在a.baidu.com:80下访问a.baidu.com:8080资源会形成端口