跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
同源策略
什么是同源策略,其作用是什么?
同源策略指的是:协议+域名+端口三者皆相同,可以视为在同一个域,否则为不同域。同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。
作用是一个用于隔离潜在恶意文件的重要安全机制。
前端解决跨域问题
jsonp:只支持 GET,不支持 POST 请求,不安全 XSS
JSONP 请求本质上是利用了 “Ajax 请求会受到同源策略限制,而 script 标签请求不会” 这一点来绕过同源策略。
cors:需要后台配合进行相关的设置
跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的 Web 应用被准许访问来自不同源服务器上的指定的资源。 — MDN
postMessage:配合使用 iframe,需要兼容 IE6、7、8、9
document.domain:仅限于同一域名下的子域
web socket:需要后台配合修改协议,不兼容,需要使用 http://socket.io
web sockets原理:在JS创建了web socket之后,会有一个HTTP请求发送到浏览器以发起连接。取得服务器响应后,建立的连接会使用HTTP升级从HTTP协议交换为web sockt协议。
proxy:使用代理去避开跨域请求,需要修改 nginx、apache 等的配置
location.hash + iframe
原理是利用location.hash来进行传值。
动态创建script
这个没什么好说的,因为script标签不受同源策略的限制。