同源与跨域

作者: 清苑折纸 | 来源:发表于2019-06-15 18:48 被阅读0次

同源

同源是浏览器最基本也是最核心的安全功能,必须协议,域名,端口,是为了保护用户数据,防止恶意网站窃取数据。(其中域名包括主域名和子域名)
注意: 对于当前页面来说页面存放的 JS 文件的域不重要,重要的是加载该 JS 页面所在什么域。

跨域

由于同源策略的限制,会阻止一个域的js脚本和另一个域的内容进行交互,所以有了跨域,当请求的URL的协议或者域名或者端口与当前页面不同时就产生了跨域。(其中域名包括主域名和子域名)

跨域的实现方法有:JSONP,CORS,降域和postMessage

JSONP

  • JSONP工作原理:动态创建<script>标签,然后利用script标签的src属性不会被同源限制来获取数据。
  • JSONP主要由两个部分构成:回调函数和数据。
  • 实现方法
    在当前页面http://a.com/a.html动态创建一个<script>标签,创建handleResponse函数,用来处理请求页http://b.com/1.txt返回的数据,在创建一个fun函数用来动态创建<script>标签,src属性向服务器发送请求,请求地址为http://b.com/1.txt,请求页中设置返回函数为handleResponse。

a.html代码如下:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <title>JSONP实现跨域</title>
    <script type="text/javascript">
        function handleResponse(response){   //处理服务器返回的数据
            console.log(response);    
        }
        function fun() {
            var script = document.createElement("script");
            script.src = "http://192.168.0.103/1.txt"; //设置请求的链接以及处理返回数据的回调函数
            document.body.insertBefore(script, document.body.firstChild);
        }
    </script>
</head>
<body>
<button id="btn" onclick="fun()">确定</button>
</body>
</html>
--------------------- 
原文:https://blog.csdn.net/qq_36119192/article/details/82931250 

1.txt代码为下

handleResponse([ { "name":"aaa",
    "sex" :"man",
    "id" : "26" },
  { "name":"bbb",
    "sex" :"woman",
    "id" : "27" },
  { "name":"ccc",
    "sex" :"woman",
    "id" : "28" }]
)
--------------------- 
原文:https://blog.csdn.net/qq_36119192/article/details/82931250 

注意:

  • 所有网站都可以拿到b.com内的数据
  • 只能是GET方式获取
  • 可能被注入恶意代码,可通过字符串过滤规避该问题

CORS

全称“跨域资源共享”,它允许ajax跨域获取数据,需要在请求的b.com中添加响应头声明允许a.com访问
Access-Control-Allow-Origin: http://a.com
注意:此方法IE8以下完全不支持,IE8-10部分支持

降域

浏览器通过document.domain来判断两个页面是否同源,所以可以通过将两个网站都设置 document.domain = 'test.com';实现跨域,此时两个页面共享cookie。
需要注意的是:

  • 只能在父域名与子域名之间使用,且将 xxx.child1.a.com域名设置为a.com后,不能再设置成child1.a.com
  • 存在安全性问题,当一个站点被攻击后,另一个站点会引起安全漏洞
  • 这种方法只适用于 Cookie 和 iframe 窗口

postMessage

跨域通信API:window.postMessage()
调用postMessage方法实现a窗口http://a.com向b窗口http://b.com发消息(b窗口同样可以通过该方法发送消息给a窗口)

// a窗口打开一个b窗口
var openWindow = window.open('http://b.com', 'title');
 
// a窗口向b窗口发消息(第一个参数代表发送的内容,第二个参数代表接收消息窗口的url)
openWindow.postMessage('Nice to meet you!', 'http://b.com');

调用message事件,监听对方发送的消息

// 监听 message 消息
window.addEventListener('message', function (e) {
  console.log(e.source); // e.source 发送消息的窗口
  console.log(e.origin); // e.origin 消息发向的网址
  console.log(e.data);   // e.data   发送的消息
},false);

相关文章

  • 网站跨域解决方法

    关键词 同源策略 什么是跨域 跨域,请求不同源。同源指协议、域名、端口都相同,只要有一样不相同就是跨域了。 同源限...

  • 前端开发的跨域问题

    跨域背景 跨域是由于浏览器的同源策略引起的;那么什么是同源策略呢?同源策略是指页面请求的接口地址必须与 url 地...

  • JSONP、CORS、跨域

    跨域 同源:两个文档同源需满足:协议、域名、端口相同跨域:不同域之间相互请求资源,就算作“跨域“。js进行DOM操...

  • 通过script标签实现跨域

    跨域 什么是跨域? 跨域问题是由于javascript语言安全限制中的同源策略造成的。同源策略是由Netscape...

  • jsonp

    参考:轻松搞定JSONP跨域请求参考:JavaScript 跨域总结与解决办法要理解跨域,先要了解一下“同源策略”...

  • SpringBoot2.x整合CORS解决跨域问题

    跨域问题系列文章 1. 同源策略与CORS(跨域请求的起源)2. SpringBoot2.x整合CORS解决跨域问...

  • 网页请求(同源策略)

    跨域与同源策略 跨域:是指的通过JS在不同域之间进行数据传输或通信。同源策略:它是由Netscape提出的一个著名...

  • H5跨域访问

    跨域访问是源于浏览器的同源策略而引申出来的概念 1、先了解什么是同源策略和跨域访问 同源策略、跨域解决方案 - R...

  • 跨域

    1.什么是跨域? 本地域与服务端的域不一致,是由浏览器同源策略限制的场景,不同源即不同域,就是跨域。 注意:协议端...

  • 跨域

    什么是跨域? 说跨域之前先要谈几个概念。跨域问题要从同源策略谈起,那什么是同源策略呢?同源是下面三项都相同,缺一不...

网友评论

    本文标题:同源与跨域

    本文链接:https://www.haomeiwen.com/subject/bpabfctx.html