当前位置:网站首页 > 编程语言 > 正文

跨域解决方案(跨域解决方案有哪些)



一、同源策略
同源策略(Same origin policy)是由 NetScape 公司在1995年提出的一种安全策略;同源策略只是一个约定,提出后被各个浏览器厂商采纳,并以各自的方式实现了同源策略。

同源策略:是浏览器最核心也最基本的安全功能,会约束浏览器的行为;
同源策略会限制浏览器:只允许本域内的脚本读写本域内的资源,不允许访问本域外的资源。










二、跨域

1. JSONP:
JSONP 就是跨域的一种实现方式。(JSONP 全称 JSON with Padding,是数据格式 JSON 的一种 “使用模式”,可用于解决主流浏览器的跨域数据访问的问题。)
JSONP 是一种非正式传输协议,该协议的一个要点就是允许用户传递一个 callback 参数给服务端,然后服务端返回数据时会将这个 callback 参数作为函数名来包裹住 JSON 数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。




JSONP 的使用:

3、降域
降域仍是解决跨域问题的一种方案,通过双向设置 document.domain 的值,解决主域名下的跨域问题

这就好比,小 A 和小 B,手里拿着城主的令牌,通过哨卡时才能畅行无阻,否则哨卡不让过

这也就决定了,降域具有很大的局限性,适用范围较小,适合在同一主域名下使用;需要有降的空间,方可使用降域方式

B 页面域为:b.yang.com

A 和 B 两页面都需加入该行代码:document.domain = 'yang.com'; ,‘yang.com 是 a.yang.com 和 b.yang.com 的主域名

4、postMessage
那么当两个主域名完全不同时,应该如何处理呢?来看看新方法 postMessage。

postMessage 并不是向服务器读写资源,只是向外发送消息而已;可以把它当做使用手机发送短信消息,仅此而已。

接收方:为 window 添加事件处理程序,事件类型为 messag

跨域原理: 同源策略是浏览器的安全策略,不是HTTP协议的一部分。服务器端调用HTTP接口只是使用HTTP协议,不会执行JS脚本,不需要同源策略,也就不存在跨越问题。

实现思路:通过nginx配置一个代理服务器(域名与domain1相同,端口不同)做跳板机,反向代理访问domain2接口,并且可以顺便修改cookie中domain信息,方便当前域cookie写入,实现跨域登录

6、 WebSocket协议跨域

实现原理: a欲与b跨域相互通信,通过中间页c来实现。 三个页面,不同域之间利用iframe的location.hash传值,相同域之间直接js访问来通信。

具体实现:A域:a.html -> B域:b.html -> A域:c.html,a与b不同域只能通过hash值单向通信,b与c也不同域也只能单向通信,但c与a同域,所以c可通过parent.parent访问a页面所有对象。

1.)a.html:(http://www.domain1.com/a.html)

2.)b.html:(http://www.domain2.com/b.html)

3.)c.html:(http://www.domain1.com/c.html)

1.)a.html:(http://www.domain1.com/a.html)

    document.body.appendChild(iframe);

3.)b.html:(http://www.domain2.com/b.html)

到此这篇跨域解决方案(跨域解决方案有哪些)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 最强法则排行(最强法则排行榜)2025-06-02 08:45:08
  • ppppppppppppp是什么意思pjhp._p(pp a p是什么意思)2025-06-02 08:45:08
  • 如何打开目录窗口(如何打开目录对话框)2025-06-02 08:45:08
  • 免费源代码网站(免费源代码网站视频)2025-06-02 08:45:08
  • ewg是什么意思(ewg是什么的缩写)2025-06-02 08:45:08
  • 字符串转int c(字符串转int c)2025-06-02 08:45:08
  • github 国内镜像(github国内镜像网站 2024)2025-06-02 08:45:08
  • 虚拟机win7有什么用(虚拟机win7好用吗)2025-06-02 08:45:08
  • 程序员入门知识(程序员基本入门知识)2025-06-02 08:45:08
  • -bash:unzip:未找到命令(unzip找不到命令)2025-06-02 08:45:08
  • 全屏图片