JavaScript

同源与跨域

2019-06-15  本文已影响0人  清苑折纸

同源

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

跨域

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

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

JSONP

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 

注意:

CORS

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

降域

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

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);
上一篇下一篇

猜你喜欢

热点阅读