今天早上在地铁看了点基础知识的考察题,看到了一个JS跨域的问题,仔细想了想自己脑子里竟然只剩下jsonp跨域和用nginx反向代理进行跨域,想着还有别的几种方法,就是想不起来,这个人呢,一上岁数这个脑子就不好使,为了防止下次又遗忘了,所以特意写一篇随笔来记录一下JS中实现跨域的方式
1.jsonp请求
2.document.domain
3.window.name
4.window.postMessage
5.CORS
6.Web Sockets
7.使用服务器进行反向代理
jsonp请求
jsonp的原理时利用script标签的跨域特性,可以不受限制的从其他域中加载资源,类似的标签还有,具体的使用方法在我前面的博文中已经写过,
注意:jsonp只支持GET请求而不支持其他类型的请求
doucment.domain
这种方式主要用在主域名相同,子域名不同的情况下
window.name
window的name属性有个特征:在一个窗口(window)的生命周期内,窗口所载入的所有页面都是共享一个window.name,每个页面对window.name都有读写权限,window.name是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置
window.postMessage
window.postMessage是html5中实现跨域访问的一种新方式,可以使用它来向其他的window对象发送消息,无论这个window对象是属于同源还是不同源
CORS
CORS背后的基本思想,就是使用自定义的HTTP头部让浏览器和服务器进行沟通,从而决定请求或响应是应该成功还是应该失败,
这个需要服务器设置header :Access-Control-Allow-Origin即可
webSocket
webSocket的原理:在JSchuangjianlewebSocket之后,会有一个HTTP请求发送到浏览器以发起链接,取得服务器响应后,建立的连接会使用HTTP升级从HTTP协议交换为websocket协议
使用服务器进行反向代理
我个人常用的nginx进行反向代理,之前也试过用nodeJS自己搭建一个服务器进行反向代理,具体的步骤暂时不详述,各位可以搜一下,一搜一大堆
好了,暂时的话就这些,但是我在工作中常用的还是最后一种用nginx服务器进行反向代理