关于跨域问题,我们首先了解到是什么原因导致出现跨域,跨域导致的结果,遇到跨域我们该如何解决处理,以下内容我将会从这个几个方面谈一下个人对此的理解。
- 出现跨域的原因:出现跨域是因为浏览器存在着一个安全功能-同源策略原因导致的。一个完整的URL地址包含以下几个方面,比如一个URL地址为‘http://www.baidu.com/index.html?name=mo&age=25#dowell’,
- 传输协议:http,https
- 域名: 例如http://www.baidu.com为网站名字,http://baidu.com为一级域名,www是服务器
- 端口:不写的话默认走的是80端口号
- 路径:http://www.baidu.com/路径1/路径2。/表示跟目录
- 携带的参数:?name=mo
- 哈希值:#dowell
只有当两个页面的协议、域名、端口都相同的时候,则满足了浏览器所谓的同源策略,才能够读写对方的资源,但凡有一个协议或者域名或者端口不相同,都不满足这个同源策略,就不能读写对方的资源了,这是一个用于隔离潜在恶意文件的重要安全机制。
2.跨域导致的结果:禁止了读写对方资源的权利(dom和js对象无法获得、AJAX无法发送、COOKIE、localstorage、indexDb等无法读取),隔离了一个潜在恶意文件的重要安全机制。
3.如何解决跨域:如果遇到跨越这种问题的时候,该怎么解决呢?
人类身份验证 - SegmentFault
- 通过jsonp跨域(唯一缺点,只能实现get请求)
- 通过documen.domain+iframe跨域
- 通过location.hash+iframe
- window.name+iframe
- postMessage跨域
- 跨域资源共享(CORS)
- nginx代理跨域
- node.js中间件代理跨域
- websocket协议跨域