什么是跨域?
浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。
跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。
这是由于浏览器的同源策略而导致的,同源策略限制了不同源之间的资源进行交互,用于隔离潜在的恶意文件的安全机制,并且是浏览器最基本的安全机制。
广义的跨域:
1)资源跳转:A链接、重定向、表单提交
2)资源嵌入:link script img frame等dom标签,还有样式中background:url()、@font-face()等文件外链
3)脚本请求:js发起的ajax请求、dom和js对象的跨域操作等
同源是指“协议+域名+端口”三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
同源策略限制以下几种行为:
1)COOKIE、LocalStorage 和 IndexDB 无法读取
2)DOM 和 JS对象无法获取
3)AJAX请求不能发送
跨域解决方案
1. 通过jsonp跨域
2. document.domain + iframe跨域
3. location.hash + iframe
4. window.name + iframe跨域
5. postMessage跨域
6. 跨域资源共享(CORS)
7. nginx代理跨域
8. node.js中间件代理跨域
9. WebSocket协议 跨域
参考文章:https://www.cnblogs.com/roam/p/7520433.html
https://www.cnblogs.com/2050/p/3191744.html