Ajax补充

122 阅读3分钟

Ajax补充

一、测试跨域

1.什么是同源

同源指的是两个 URL 地址具有相同的协议、主机名、端口号。

2.什么是同源策略

同源策略(英文全称 Same origin policy)是浏览器提供的一个安全功能。 浏览器的同源策略规定:不允许非同源的 URL 之间进行资源的交互。

3.什么是跨域

(1)同源指的是两个 URL 的协议、主机名、端口号完全一致,反之,则是跨域。

(2)出现跨域的根本原因:浏览器的同源策略不允许非同源的 URL 之间进行资源的交互。例如:

①网页:www.test.com/index.html

②接口:www.api.com/userlist

③受到同源策略的限制,上面的网页请求下面的接口会失败!

4.浏览器对跨域请求的拦截过程

浏览器允许发起跨域请求。但跨域请求回来的数据,会被浏览器拦截,无法被页面获取到!

5.突破浏览器跨域限制的两种方案
方案诞生的时间方案来源优点缺点
JSONP出现较早民间(非官方)兼容性好(兼容低版本 IE)仅支持 GET 请求
CORS出现较晚W3C 官方标准支持 GET、POST、PUT、DELETE、PATCH等常见的请求方式不兼容某些低版本浏览器
6.什么是 JSONP

(1)JSONP 是实现跨域数据请求的一种技术解决方案。它只支持 GET 请求,不支持 POST、DELETE 等其它请求。

①在实际开发中很少被使用

②在面试中可能会问到 JSONP 的原理

(2)跨域的目的 拿到后端的数据 (前端和后端 跨域 不同源 直接发送ajax请求 失败)

(3)script标签的src属性不受同源策略的影响 跨域

(4)浏览器对于script的支持

①允许它下载指定路径的js代码 (js代码 由后端程序员来设定它内容),show({data:['a','b','c']}) => show 后端自己命名 - show中传递了真正的数据

②而且还会执行 js代码 ,你前端需要自己来定义 show方法的内容 你前端的业务逻辑

    <script>
      // option后端想要给前端传递数据
      function show(option) {
        console.log('数据回来了, 后端帮我们调用的show 里面有数据');
        console.log(option);
      }
      /* 
      1 跨域的目的 拿到后端的数据  (前端和后端 跨域  不同源 直接发送ajax请求 失败)
      2 script标签的src属性不受同源策略的影响 跨域 
      3 浏览器对于script的支持 
        1 允许它下载指定路径的js代码 (js代码 由后端程序员来设定它内容)  
           show({data:['a','b','c']}) => show 后端自己命名 -  show中传递了真正的数据 
        2 而且还会执行 js代码 
          你前端需要自己来定义 show方法的内容 你前端的业务逻辑
      */
      // show();
      // let data = 1233;
      // show();
    </script>

    <!-- 根据后端要求写的请求js的代码 -->
    <script src="http://www.itcbc.com:3006/api/getscript2"></script>
    <!-- 随便加载别人公司的js文件 !!  -->
    <!-- <script src="./utils/04.js"></script> -->

    <script>
      // 前端拿到后端的数据

      // 希望前端自己来定义show方法的业务
      function show(option) {
        alert('我的数据拿到啦' + option.message);
      }
    </script>

    <!-- 自己来定义 后端起的函数名称 show  函数 自己来具体的业务 -->
    <script src="http://www.itcbc.com:3006/api/getscript2"></script>

    <!-- <script>
      // show里面的数据 就是后端想要给我们返回的数据
      show({ message: '你必须自己定义好叫做show的函数,否则就会出错' });
    </script> -->
7.CORS 的概念

(1)CORS 是解决跨域数据请求的终极解决方案,全称是 Cross-origin resource sharing。

(2)CORS 技术需要浏览器和服务器同时支持,二者缺一不可:

①浏览器要支持 CORS 功能(主流的浏览器全部支持,IE 不能低于 IE10)

②服务器要开启 CORS 功能(需要后端开发者为接口开启 CORS 功能)

(3)实现 CORS 的关键服务器端,因为如果服务器端没有开启 CORS 功能,则客户端无法访问那些跨域的接口!

(4)CORS 的原理:服务器端通过 Access-Control-Allow-Origin 响应头,来告诉浏览器当前的 API 接口是否允许跨域请求。

(5)CORS 的两个主要优势

①CORS 是真正的 Ajax 请求,支持 GET、POST、DELETE、PUT、PATCH 等这些常见的 Ajax 请求方式

②只需要后端开启 CORS 功能即可,前端的代码无须做任何改动

8.JSONP 不是真正的 Ajax 技术

(1)在解决跨域问题时:

CORS 方案用到了 XMLHttpRequest 对象,发起的是纯正的 Ajax 请求

JSONP 方案没有用到 XMLHttpRequest 对象,因此,JSONP 不是真正的 Ajax 技术

(2)结论:只要用到了 XMLHttpRequest 对象,发起的就是 Ajax 请求!