理解跨域

了解跨域前,先了解同源策略

同源策略

  • 同源策略是浏览器的一种安全策略,所谓同源是指域名、协议、端口完全相同。若只有目录不同则仍是同源。
  • 在同源策略下,只有同源的地址才可以相互通过Ajax的方式请求。
  • 在同源策略下,浏览器不允许Ajax跨域获取服务器数据。
  • 同源或者不同源说的是两个地址之间的关系,不同源地址之间请求称为——跨域。

跨域解决方案

  • JSONP

  json with padding,是一种借助于script标签发送跨域请求的技巧。原理就是在客户端借助script标签请求服务器的一个地址。

  地址返回一段带有某个全局函数调用的JavaScript脚本。在调用函数中,原本需要返回给客户端的数据通过参数传递给这个函数。这样客户端的函数中就可以通过参数得到原本服务端想要返回的数据。

<input type="button" value="请求" class="btn">
<script src="../jq/jquery-1.12.4.min.js"></script>
<script>
   $(".btn").click(function(){
   //发送跨域请求
    $.ajax({
           url:"https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web",
           type:"get",
           dataType:"jsonp",
           jsonp:"cb",//这个属性是设置回调函数的参数名称(必须与后台接口的回调函数参数名保持一致)
          jsonpCallback:"jsp1",//JQ自动分配的回调函数的名称进行重命名
          data:{"wd":"ajax的跨域"},
          success:function(data){
               console.log(data);
           }
     })
 })
</script>
  • JSONP只能发送GET请求,JSONP用的是script标签,与ajax提供的XMLHttpRequest没有任何关系。

  • 在jquery中,使用$.ajax()时,将dataType设置为jsonp即可

CORS跨域

  • 跨域资源共享,Cross Origin Resource。这种方案无需客户端做出任何变化,只是在被请求的服务端响应时添加一个Access=Control-Allow-Origin的响应头,表示这个资源是否允许指定域请求。

    Access-Control-Allow-Origin的值有:
        ① * (允许任意资源访问,不安全);
        ② http://foo.com  (允许指定的源访问)

    服务端的演示:

    <?php
    //通过设置响应头,允许其他的网站服务器跨域访问这个文件
       header("Access-Control-Allow-Origin:http://foo.example");
       header("Access-Control-Allow-Origin:*");
    >
    

关于跨域的示例代码:

这里通过模仿百度搜索,调用百度的一个搜索接口实现跨域

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一:SSO体系结构 SSO ​ SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用...
    风平浪静如码阅读 3,841评论 0 1
  • 引言: 前后端分离之前,不存在跨域限制,因为请求所出的页面和应用服务器所处在同一个域下。而随着前后端的分离,前...
    0爱上1阅读 3,744评论 0 0
  • 先说说跨域这事情吧。早在13年,我刚接触前端开发的时候就遇到了跨域,那时候刚开始流行前后端分离。解决跨域就是直接...
    clp简阅读 14,311评论 0 6
  • 一、浏览器的同源策略 在web应用的安全模型中是一个重要概念。在这个策略下,web浏览器允许第一个页面的脚本访问第...
    DannyCloud阅读 3,624评论 0 0
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    余生动听阅读 13,586评论 0 11