26.6、6种跨域获取数据的方法

2020-07-25  本文已影响0人  一土二月鸟

这个整理的更好: https://blog.51cto.com/u_14115828/3733252

前奏

// ps 做此测试,需要将页面放置服务器,浏览器直接打开本地文件会报跨域错误
// 本地安装npm后,可在页面所在文件夹通过npx httpserver命令启动本地服务器
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    我是页面A
    <iframe src="./B.html"></iframe>
    <script type="text/javascript">
      var iframeB = document.getElementsByTagName('iframe')[0];
      
      iframeB.onload = function () {  // 通过onload事件,等页面加载完了才可以获取被加载页面的属性
        console.log(iframeB.contentWindow.x); // b-x
      }
    </script>
  </body>
</html>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
  </head>
  <body>
    我是页面B
    <script type="text/javascript">
      window.x = 'b-x';
    </script>
  </body>
</html>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    我是页面A
    <iframe src="http://localhost:8081/test1.html"></iframe>
    <script type="text/javascript">
      var iframeB = document.getElementsByTagName('iframe')[0];
      
      iframeB.onload = function () {
        console.log(iframeB.contentWindow); // 运行结果见下图
      }
    </script>
  </body>
</html>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    我是页面test1
    <script type="text/javascript">
      window.x = 'test1-x';
    </script>
  </body>
</html>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    我是页面A <br />
    <a href="http://localhost:8081/test1.html" target="_self">跳到页面B</a>
    <script type="text/javascript">
      window.name = 'a-x';  
    </script>
  </body>
</html>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    我是页面test1
    <script type="text/javascript">
      console.log(window.name);
    </script>
  </body>
</html>

跨域 1 服务器中转

跨域 2 iframe

跨域 3

跨域 4

跨域5

跨域6

总结

3 + 4
JSONP
服务器:中转;配置Access;
iframe:iframe+domain(子域名跨域);iframe+window.name;iframe+url参数;iframe+postmessage/onmessage;

疑问2

疑惑1

  1. 为什么刷新任何一个网站的时候,都没有304,而是200

  2. tcp是可靠的连接,是否可以基于tcp直接传输数据,不经过http等协议

  3. 四次挥手 如果是服务器发起 流程是怎样
    2.1 时间线的开始阶段是发生在TCP/IP断开连接之前发生的 我这样理解有问题吗?
    当HTML页面被下载下来后,就立马进入时间线流程了,但TCP/IP四次挥手是要等http请求结束后才会触发的 因此时间线的开始要早于四次挥手

  4. http一定是基于tcp?客户端cs架构一般用的什么协议?

  5. post请求时,会在tcp第三次握手时,先将请求头传输到服务器,服务器返回100后,客户端继续请求,为什么浏览器看不到100?

  6. 验证网速特别慢时,是否会等图片加载结束后,才执行onload
    how browser work
    下图为什么没有406

ajax相关

上一篇 下一篇

猜你喜欢

热点阅读