博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跨域的理解
阅读量:7031 次
发布时间:2019-06-28

本文共 1299 字,大约阅读时间需要 4 分钟。

跨域的理解

什么是跨域?

当 A 网站去调用 B 网站的数据时,由于浏览器的同源策略 (域名、协议、端口号相同),跨域访问会受到限制。

解决方案

  • JSONP
  • CORS

JSONP 的理解:

  • JSONP 它不是一个新的技术,更多的是前端与后端的约定;用来实现不同网站之间的数据;
  • 主要利用 HMTL 中的 script 标签天生就有跨域能力的特性(动态添加 script 标签);
  • 作为前端要做的是:
    • 需要在全局范围内准备一个函数,用来接收后台传过来的数据;
    • 发送请求,并且将我们在全局范围内准备的函数通过参数的形势传递出去;
  • 作为后端要做的是:
    • 接收前台传递过来的函数的名字;
    • 通过各种手段获取数据;
    • 返回前端传递过来的函数的调用,并且将数据通过函数参数的形势传递到前端;
      注意: JSONP只支持 get 请求;

CORS 的理解:

  • CORS 请求跨域数据,原理是直接使用 XHR 这个对象,来发起 get 和 post 请求;

  • 启用 CORS,需要后端进行特殊的配置,否则前端发起 CORS 类型的 AJAX 请求,后盾处理不了;

  • 比如 node 中:

    • 安装 cors 第三方模块;
    • 启用 cors 中间件;
  • 在 PHP 中:

    • 后端配置:
    header("Access-Control-Allow-Origin:*");     header("access-Control-Allow-Methods: post,get);复制代码

JSONP 小例子:

通过 360 搜索获取数据;

 
    复制代码
    // 全局函数function GetData(data){    let str = "";    data.result.forEach(item => {      str += `
  • ${item.word}
  • `; }); container.innerHTML = str;}let inp = document.querySelector('#inp');let container = document.querySelector('#container'); inp.onkeyup = function(){ let keyword = inp.value; let script = document.createElement('script'); script.src = `https://sug.so.360.cn/suggest?callback=GetData&encodein=utf-8&encodeout=utf-8&format=json&fields=word&word=${keyword}&sid=7824548ceff07a28716d37a1e52da72d&pq=a`; document.body.appendChild(script);}复制代码

    转载于:https://juejin.im/post/5c23a40e6fb9a049e06361be

    你可能感兴趣的文章
    POJ3264 Balanced Lineup
    查看>>
    redis-cli 连接远程服务器
    查看>>
    emlog通过pjax实现无刷新加载网页--完美解决cnzz统计和javascript失效问题
    查看>>
    sublime 之 vitage/emmet
    查看>>
    代码管理(四)SVN和Git对比
    查看>>
    python - hadoop,mapreduce demo
    查看>>
    mongodb常见管理命令
    查看>>
    1.7 以函数对象取代函数
    查看>>
    Vue过渡效果之JS过渡
    查看>>
    Android项目实战(三):实现第一次进入软件的引导页
    查看>>
    Web Service基础——基础概念
    查看>>
    Linux2.4文件系统中vfsmount、安装点的dentry、设备的dentry之间的关系【转】
    查看>>
    POJ 1201 Intervals
    查看>>
    JAVA訪问URL
    查看>>
    APP接口基础学习一
    查看>>
    设计模式 策略模式 以角色游戏为背景
    查看>>
    【转】CSS和SVG中的剪切——clip-path属性和<clipPath>元素
    查看>>
    【C语言入门教程】5.4 递归
    查看>>
    UVALive 6915 Leveling Ground 倍增RMQ
    查看>>
    Inside ARC — to see the code inserted by the compiler
    查看>>