跨域解决方案汇总

parallel_y 2019-03-02 02:43:00 阅读数:145 评论数:0 收藏数:0

跨域解决方案汇总

同源策略

由于浏览器的同源策略,如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源,只要有一者不同,就会造成跨域

jsonp

jsonp由两部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数。回调函数的名字一般是在请求中指定。而数据就是传入回调函数中的JSON数据。形式如下:

<script>
var localHandle = function(data){
    alert("返回的数据:" + data);
}
</script>

<script src="http://remoteserver.com/remote.js?name=value&callback=localHandle"></script>

remote.js代码如下:

localHandler({"result":"我是远程js带来的数据"});

服务器根据请求里的callback=localHandle知道了本地的回调函数名称localHandle,查询字符串为name=value,然后服务器执行相对应的函数并返回数据给本地的localHandle回调函数。

建议动态的创建script来查询

<script>
var localHandle = function(data){
    alert("返回的数据:" + data);
}

// 提供jsonp服务的url地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码)
var url = "http://remoteserver.com/remote.js?name=value&callback=localHandle";
// 创建script标签,设置其属性
var script = document.createElement('script');
script.setAttribute('src', url);
// 把script标签加入head,此时调用开始
document.getElementsByTagName('head')[0].appendChild(script);
</script>

jsonp优点

简单易用,能够直接访问响应文本,支持浏览器和服务器之间的双向通信

jsonp缺点

  • 安全性不足。借助JSONP有可能进行跨站请求伪造(CSRF)攻击,当一个恶意网站使用访问者的浏览器向服务器发送请求并进行数据变更时,被称为CSRF攻击。由于请求会携带cookie信息,服务器会认为是用户自己想要提交表单或者发送请求,而得到用户的一些隐私数据。
  • 错误原因不易找。JSONP缺乏错误处理机制,如果脚本注入成功后,就会调用回调函数,但是注入失败后,没有任何提示。这就意味着,当JSONP遇到404、505或者其他服务器错误时,你是无法检测出错原因的。我们能够做的也只有超时,没有收到响应,便认为请求失败,执行对应的错误回调。
  • 只能适用于get请求。只能使用GET请求就意味着很多限制,提交到服务器的数据量将受限于浏览器的最大URL长度。

jsonp封装

/**
 * JSONP请求工具
 * @param url 请求的地址
 * @param data 请求的参数
 * @returns {Promise<any>}
 */
const request = ({url, data}) => {
  return new Promise((resolve, reject) => {
    // 处理传参成xx=yy&aa=bb的形式
    const handleData = (data) => {
      const keys = Object.keys(data)
      const keysLen = keys.length
      return keys.reduce((pre, cur, index) => {
        const value = data[cur]
        const flag = index !== keysLen - 1 ? '&' : ''
        return `${pre}${cur}=${value}${flag}`
      }, '')
    }
    // 动态创建script标签
    const script = document.createElement('script')
    // 接口返回的数据获取
    window.jsonpCb = (res) => {
      document.body.removeChild(script)
      delete window.jsonpCb
      resolve(res)
    }
    script.src = `${url}?${handleData(data)}&cb=jsonpCb`
    document.body.appendChild(script)
  })
}
// 使用方式
request({
  url: 'http://localhost:9871/api/jsonp',
  data: {
    // 传参
    msg: 'helloJsonp'
  }
}).then(res => {
  console.log(res)
})

空iframe加form

const requestPost = ({url, data}) => {
  // 首先创建一个用来发送数据的iframe.
  const iframe = document.createElement('iframe')
  iframe.name = 'iframePost'
  iframe.style.display = 'none'
  document.body.appendChild(iframe)
  const form = document.createElement('form')
  const node = document.createElement('input')
  // 注册iframe的load事件处理程序,如果你需要在响应返回时执行一些操作的话.
  iframe.addEventListener('load', function () {
    console.log('post success')
  })

  form.action = url
  // 在指定的iframe中执行form
  form.target = iframe.name;   //target规定在何处打开 action URL。这里可以通过iframe.name来指定iframe
  form.method = 'post'
  for (let name in data) {
    node.name = name
    node.value = data[name].toString()
    form.appendChild(node.cloneNode())
  }
  // 表单元素需要添加到主文档中.
  form.style.display = 'none'
  document.body.appendChild(form)
  form.submit()

  // 表单提交后,就可以删除这个表单,不影响下次的数据发送.
  document.body.removeChild(form)
}
// 使用方式
requestPost({
  url: 'http://localhost:9871/api/iframePost',
  data: {
    msg: 'helloIframePost'
  }
})

document.domain + iframe

通过document.domain将两个页面的域名都设置成相同域名,也可以实现跨域。 不过这个方法只适用于不同子域的框架间的交互

// a.html
<iframe id="iframe" src="http://child.domain.com/b.html"></iframe>
<script>
    document.domain = 'domain.com';
    var user = 'admin';
</script>
// b.html
<script>
    document.domain = 'domain.com';
    // 获取父窗口中变量
    alert('get js data from parent ---> ' + window.parent.user);
</script>

location.hash

通过location.hash来跨域,原理是改变url的hash部分来进行双向通信,父页面向iframe子页面通信只需监听自身的url变化来发送信息,而子页面向父页面通信就麻烦一些,由于两个页面不在同一个域,IE和Chrome都不允许修改parent.location.hash的值,所以需要创建一个和父页面同域的中间页,中间页可利用parent.parent访问父页面的所有对象。

该方法的缺点是会造成不必要的浏览器历史记录,并且有些浏览器不支持onhashchange事件,数据直接暴露在url中,数据容量和类型都有限等。

 // a.html
<iframe id="iframe" src="http://www.domain2.com/b.html" style="display:none;"></iframe>
<script>
    var iframe = document.getElementById('iframe');

    // 向b.html传hash值
    setTimeout(function() {
        iframe.src = iframe.src + '#user=admin';
    }, 1000);
    
    // 开放给同域c.html的回调方法
    function onCallback(res) {
        alert('data from c.html ---> ' + res);
    }
</script>
 // b.html
<iframe id="iframe" src="http://www.domain1.com/c.html" style="display:none;"></iframe>
<script>
    var iframe = document.getElementById('iframe');

    // 监听a.html传来的hash值,再传给c.html
    window.onhashchange = function () {
        iframe.src = iframe.src + location.hash;
    };
</script>
 // c.html
<script>
    // 监听b.html传来的hash值
    window.onhashchange = function () {
        // 再通过操作同域a.html的js回调,将结果传回
        window.parent.parent.onCallback('hello: ' + location.hash.replace('#user=', ''));
    };
</script>

window.name + iframe

window.name + iframe,利用window.name在不同页面(甚至不同域)加载后依旧存在,并且支持大小达到了2MB。 步骤: 首先在a页面中创建iframe,将src指向外域保存数据到window.name,再将iframe的src指向和a页面同域的b代理页面,借此让a页面以iframe.contentWindow.name的形式成功读取数据。

//a.html
var proxy = function(url, callback) {
    var state = 0;
    var iframe = document.createElement('iframe');

    // 加载跨域页面
    iframe.src = url;

    // onload事件会触发2次,第1次加载跨域页,并留存数据于window.name
    iframe.onload = function() {
        if (state === 1) {
            // 第2次onload(同域proxy页)成功后,读取同域window.name中数据
            callback(iframe.contentWindow.name);
            destoryFrame();

        } else if (state === 0) {
            // 第1次onload(跨域页)成功后,切换到同域代理页面
            iframe.contentWindow.location = 'http://www.domain1.com/proxy.html';
            state = 1;
        }
    };

    document.body.appendChild(iframe);

    // 获取数据以后销毁这个iframe,释放内存;这也保证了安全(不被其他域frame js访问)
    function destoryFrame() {
        iframe.contentWindow.document.write('');
        iframe.contentWindow.close();
        document.body.removeChild(iframe);
    }
};

// 请求跨域b页面数据
proxy('http://www.domain2.com/b.html', function(data){
    alert(data);
});
//b.html
<script>
    window.name = 'This is domain2 data!';
</script>

postMessage跨域

postMessage是HTML5新增的window属性

用法:postMessage(data,origin)方法接受两个参数

//a.html
<iframe id="iframe" src="http://www.domain2.com/b.html" style="display:none;"></iframe>
<script>       
    var iframe = document.getElementById('iframe');
    iframe.onload = function() {
        var data = {
            name: 'aym'
        };
        // 向domain2传送跨域数据
        iframe.contentWindow.postMessage(JSON.stringify(data), 'http://www.domain2.com');
    };

    // 接受domain2返回数据
    window.addEventListener('message', function(e) {
        alert('data from domain2 ---> ' + e.data);
    }, false);
</script>
//b.html
<script>
    // 接收domain1的数据
    window.addEventListener('message', function(e) {
        alert('data from domain1 ---> ' + e.data);

        var data = JSON.parse(e.data);
        if (data) {
            data.number = 16;

            // 处理后再发回domain1
            window.parent.postMessage(JSON.stringify(data), 'http://www.domain1.com');
        }
    }, false);
</script>

CORS

CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。

整个CORS通信过程中,都是浏览器自动完成,对于开发者来说,CORS和同源的AJAX通信没有差别,浏览器一旦发现AJAX跨域,就会自动添加一些附加的头部信息,根据请求的不同还会多出一次附加的请求。

实现CORS通信的关键是服务器,只要服务器实现了CORS接口,就实现了跨域

服务器实现CORS通信的关键是设置以下请求头

  1. Access-Control-Allow-Origin,
    该字段时必选的,用于设置允许响应资源的origin
Access-Control-Allow-Origin: *  //允许所有域
Access-Control-Allow-Origin: <origin>   允许指定的origin
  1. Access-Control-Allow-Credentials 该字段是可选的,用于设置是否允许发送Cookie,该字段的值只能设为布尔值 ==true== ,删除该字段即可不发送。如果需要发送Cookie,这里还需要前端的AJAX请求设置 ==withCredentials== 属性,此外,Access-Control-Allow-Origin不能设为星号,必须明确指定与请求网页一致的域名,并且,Cookie依旧遵循同源策略,只有用服务器域名设置的Cookie才会上传,其他域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也无法读取服务器域名下的Cookie。
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
  1. Access-Control-Expose-Header
    该字段可选,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定。

CORS与JSONP比较

CORS与JSONP的使用目的相同,但是比JSONP更强大。

JSONP只支持GET请求,CORS支持所有类型的HTTP请求。JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据。


版权声明:本文为[parallel_y]原创文章
转载请带上:http://copyfuture.com/blogs-details/793a51587987d8f7b1f64f14ac1829aa
或:https://www.cnblogs.com/y-dt/p/10458176.html


  1. 逐鹿空间引力波:中国“太极计划”初步掌握多项关键核心技术
  2. 3.5万美元Model 3交车跳票 买家到现在影子都没见
  3. 听说,你的指甲里藏着疾病的秘密?
  4. 奔驰新E级售43.58万-62.98万 排量减1.5L
  5. 学习react教程
  6. 中枪没?中国人对日本人的这五件事完全误解了!
  7. 围观媒体和用户对iQOO的评价:这是什么神仙充电速度?
  8. 这5个常见小习惯,会让你越来越疲惫!不能太放纵自己
  9. 超越勇士!单赛季三分球命中数前三被火箭包揽 魔球理论走到底
  10. 《塞尔达传说》真结局,林克和公主在现实中结婚了,网友们都哭了
  11. Nginx入门个人理解以及笔记记录(1)
  12. 远离肾病,从这8点做起!
  13. 利用CloudflareAPI批量添加域名至Cloudflare账户
  14. 京东迎来巨变!刘强东痛怒!
  15. 汉宣帝把王氏迎娶进宫,又封为皇后,为何却又几乎不和她见面
  16. 知否知否?政府工作报告里有这些“暖心词”
  17. 没买车的赚了!4款热销车性价比逆天大降价,皮实耐造又省油
  18. 使用ES6的reduce函数,根据key去重
  19. vue 表单校验(二)
  20. 旅行者号将在500年后飞入奥尔特云,它们能安全离开吗?
  21. 2018 世界人工智能大会(马云 马化腾 雷军 李彦宏)演讲录
  22. 姜皓文,香港影坛新一代黄金配角!
  23. 马刺赢勇士,虽然只是常规赛,但是老练下还有一点不同于其他球队
  24. 和平时期CEO与战备状态CEO
  25. 结合JDK源码看设计模式——享元模式
  26. 它是中医认为的身体最重要的地方!它好了才会生病少!
  27. LeetCode算法题-Rectangle Overlap(Java实现)
  28. 意难平?柯震东再晒本人版《捉妖记》剧照引争议
  29. 费德勒他的 20 冠伟业,后人有可能追上吗?
  30. 当你对手机上瘾时,硅谷精英早已让子女“逃离屏幕”
  31. 在中国销量猛增后,iPhone再降价!
  32. LCK巅峰战落幕!SKT战败却很惊艳,姿态:GRF在吃老本!
  33. 朱伟华:“三包”是淘汰新造车企业的利器?
  34. 府兵和募兵差在哪?不能打不重要,听不听话才重要!
  35. 你们知道大家常说的“三高”都有哪些吗?
  36. 自然语言处理(五)——实现机器翻译Seq2Seq完整经过
  37. 从郭碧婷的钻戒开聊,有钱家族洗脱暴发户味需要怎样的儿媳
  38. 马来之虎——日军一场奇异的“闪击战”
  39. 印度研发出第一款自主制造的微处理器AJIT 价格不到2美元
  40. 红旗HS5实车现身,蓝色车身质感不俗,比奥迪Q5L还大,满足国六
  41. 疯狂的JSONP
  42. 人脸识别门禁的智能化演进之路
  43. 远离积食、营养不良,你家宝宝的“膳食宝塔”牢固吗?
  44. 吊丝炒房团,扑腾柬埔寨!
  45. 据说管虎这五部鬼吹灯网剧即将开拍,五部连拍不换演员你期待吗?
  46. Solr 16 - 增删改Solr中索引数据的几种方式 (在URL上或Web页面中操作)
  47. 名宿:C罗的头球冠绝世界,就像一次完美的挥杆
  48. 英国名嘴发文攻击哈里,说王子失去真实自我,全因受梅根王妃影响
  49. 还在看纽博格林和铃鹿?不如了解一下中国最新、最高级的赛道——浙赛!
  50. 为什么香港人很少会买大众?满街都是丰田和豪车?还好听了师傅说
  51. 糖耐几周做最好?糖耐的流程和时间?糖耐要过关,孕妇需要这样做
  52. 100分父母丨一个28周早产儿的妈妈,用爱为女儿创造了生命的奇迹
  53. 终于找到伊藤美诚的弱点!国乒应该好好感谢这个人
  54. 阿里面试题BIO和NIO数量问题附答案和代码
  55. 由于物联网,数据可能是建筑管理者最宝贵的资源
  56. 现实版的霍格沃茨、中世纪的大教堂!这里每一处都是神仙建筑!
  57. 2018净赚超34亿的陌陌,早就不是那个“约吗”平台了
  58. 自建 yum 源
  59. 脂肪肝"最爱"这8类人
  60. 第八批游戏版号发放:品类百花齐放,大厂悉数登场
  61. 工作5年的Java程序员,才学会阅读源码,可悲吗?
  62. 大学毕业的他,成功创业,拥有加盟店60多家,月销售额达百万
  63. 金星和地球极为相似,火星却小得多,为啥各航天大国都去探索火星
  64. MIP组件开发 自定义js组件开发步骤
  65. 国宝回家的背后
  66. 华为、中国电信完成全球首个5G SA网络电力切片测试
  67. java多线程之述解
  68. 世界级题材工业大麻第一票
  69. 瓜子二手车被曝“套路”消费者,90亿美元估值企业遭遇信任危机
  70. 解读迅雷Q4财报:陷入营收增长困局的它该如何自救?
  71. 女人不管是奔几,美都在骨不在皮,如何根据骨骼类型来穿衣
  72. 赵立新言论不当风波后匆匆露面 现任妻子及三子女首次曝光
  73. 沃尔沃刚买一年半,却因同一问题四次“回炉”!哈尔滨尊荣亿方汽车贸易公司:不够换车标准,继续提供维修!
  74. 药用蔬菜受青睐,但不宜常上餐桌,也不是所有人都适合吃
  75. 数据结构--二叉搜索树
  76. 外媒:英伟达以69亿美元现金收购Mellanox
  77. PHP Iterator迭代对象属性
  78. 2005年被称为杜琪峰年,看了40多张电影海报后,终于知道他多牛了
  79. k8s重要概念及部署k8s集群(一)--技术流ken
  80. 日本天皇身穿龙袍在皇居举行仪式,向历代祖宗报告4月30日将退位
  81. 为什么火车上有许多空座位,可是我们却还买不到票?长见识了
  82. 杨幂离婚后又一次官宣,男主是他,网友:很期待哦。
  83. 陕西最美公路之(姜眉路)
  84. 2019年第10周上市新车汇总
  85. 正向代理与反向代理的区别
  86. 美国为何能在航空领域领先20年?看了这个发动机你就懂了!
  87. 地球毁灭的十种方式,人类生死只在一线之间
  88. 真正聪明的人,只过1%的生活
  89. 缅北的武装冲突不断的背后,竟然全源于一纸协议没有落实
  90. des加密算法java&c#
  91. 【夜读】懂你的人,最温暖
  92. 星语星愿 实拍播威BOVET 1822 Récital 23女士腕表
  93. 地球生命来自另一个星系吗
  94. 这个人将中国变成量子超级大国:潘建伟,中国的“量子之父”
  95. 绝地求生:印度将禁止玩吃鸡写进当地法律 暴力诱惑都怪游戏?
  96. Kafka的partions和replication-factor参数的理解
  97. WebRTC手记之初探
  98. 29省份晒一季度经济“成绩单”:16地跑赢全国
  99. 最前线 | 小米9系列全线缺货,小米官方致歉
  100. 亚洲最悲催的沿海国,境内几乎没有一滴淡水,如今百姓都富得流油

  1. Python开发:部分第三方库无法在线安装解决方法(949)
  2. [Swift]LeetCode325. 最大子数组之和为k $ Maximum Size Subarray Sum Equals k(779)
  3. Matlab 2019a 安装包下载以及安装和激活(720)
  4. 仅限Edge和Chrome访问 全新网页端Skype应用上线(686)
  5. 前端笔记之NodeJS(一)初识NodeJS&内置模块&特点(684)
  6. C#读取excel文件提示未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序(663)
  7. 【预警通告】Weblogic反序列化远程代码执行漏洞(640)
  8. Visual Studio 2019 正式发布,重磅更新,支持live share(600)
  9. 【预警通告】Apache Tomcat远程代码执行漏洞CVE-2019-0232(573)
  10. 网上赌博平台维护审核提不了款怎么办?(535)
  11. React 与 React-Native 使用同一个 meteor 后台(529)
  12. Sublime Text3 最新版3207 安装及破解(458)
  13. Visual Studio 2019 正式发布(389)
  14. [翻译] Visual Studio 2019: 极速编码. 智能工作. 创造未来.(389)
  15. 刘强东身边的CXO还有谁“幸存”(373)
  16. 舍命生子产妇吴梦丈夫怒斥:没抢肺源不是精神分裂,网友断章取义(371)
  17. Confluence SSRF及远程代码执行漏洞处置手册(370)
  18. 阿里巴巴2018年纳税516亿元 同比增40%(370)
  19. 机器学习 ML.NET 发布 1.0 RC(369)
  20. K8s集群安装--最新版 Kubernetes 1.14.1(338)
  21. 雷军清华演讲实录:小米9年的创新、变革与未来(334)
  22. 小米手机卖不动了?(327)
  23. F#周报2019年第14期(317)
  24. 积分一样却选手下败将出战国际赛,《最强大脑》云队选手被坑了?(300)
  25. 《最强大脑》要垮?桑洁魏坤琳出轨细节被扒,戚薇才是神助攻(257)
  26. 华电教授孙玉兵被指与昔日同学共同学术造假,多所高校调查(251)
  27. F#周报2019年第15期(249)
  28. 日本明仁天皇退位,日本“平成”年代结束(246)
  29. linux系统安装cdcfordb2udb(241)
  30. Oracle甲骨文大规模裁员,你背离时代就会被淘汰(240)
  31. 他联系叙恐怖分子“卖军火”,称能搞到2000枚导弹,关键时刻中国警察出手(237)
  32. 针对django2.2报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: ill....(236)
  33. 魔兽世界:8.15搏击俱乐部坐骑获取流程 鳄鱼布鲁斯坐骑(236)
  34. 女友被曝插足许志安郑秀文婚姻 知情人透露马国明已下定决心分手(232)
  35. SQL简介及MySQL的安装目录详解(229)
  36. 视觉中国深夜道歉:全面配合监管部门彻底积极整改(229)
  37. 为什么国内汽车用沥青阻尼片,而欧洲主机厂却用树脂?(229)
  38. 谁是苏小明饭局爆粗偷拍者?知情人称另有其人(225)
  39. NodeJs之邮件(email)发送(223)
  40. 迪玛希好惨!昨晚《歌手》为声入人心男团帮帮唱,却再被指控侵权(223)
  41. 市值暴跌90%,世界零售巨头申请破产战胜了所有对手却输时代(221)
  42. 函数防抖,与函数节流(221)
  43. 机器学习基石笔记:01 The Learning Problem(218)
  44. 深度学习python的配置(Windows)(215)
  45. [深度应用]·实战掌握Dlib人脸识别开发教程(213)
  46. 许志安出轨视频系蓄谋偷拍?司机被曝收40万装红外摄像头(210)
  47. Google AI 系统 DeepMind 高中数学考试不及格(210)
  48. 干货!21部漫威电影观影顺序指南,在《复联4》之前赶紧补齐!(209)
  49. 赌命生子九个月后,吴梦离世:前半辈子任性了,我用生命买单(206)
  50. 威廉王子出轨凯特王妃闺蜜? 外媒称婚外情致兄弟反目(203)
  51. spring-cloud-sleuth+zipkin源码探究(203)
  52. WebGL three.js学习笔记 纹理贴图模拟太阳系运转(201)
  53. 新更新kb4493472导致无法正常开机(195)
  54. 杜敬谦死因疑曝光!或因他这一特殊的训练方式,泳迷高呼孙杨退役(191)
  55. AntDesign Form表单字段校验的三种方式(189)
  56. 韦杰落网,金诚集团终局(188)
  57. 华为推出方舟编译器 称可提升安卓系统效率(186)
  58. 山东庆云民企3000亩土地被贱卖 国企接盘拟转性(185)
  59. 《权力的游戏》龙妈有那么多爱她的人,为什么最终会选择琼恩雪诺(183)
  60. 张无忌为什么爱上她?陈钰琪版赵敏终于给答案了(181)
  61. “国防”靠美国? 韩国瑜=马英九2.0? 走着瞧(180)
  62. 直认与老公感情淡了!27岁TVB上位女星:我们不是好熟(180)
  63. Python破解Wifi密码思路(180)
  64. CUBA Studio 8.0 发布,企业级应用开发平台(179)
  65. Github 上 Star 最多的个人 Spring Boot 开源学习项目(178)
  66. 张丹峰出轨最新锤来了!毕滢的朋友圈简直刷新下限啊!(177)
  67. 拿着普通员工超300倍的工资裁员800人,这家游戏公司CEO引发员工不满|一周新闻(177)
  68. 币安称 4000 万美元比特币被盗(175)
  69. 使用 C 语言实现一个 HTTP GET 连接(175)
  70. 不要996!程序员创建955.WLB不加班公司名单,GitHub周榜第二(175)
  71. AntD框架的upload组件上传图片时遇到的一些坑(175)
  72. 《跃迁-成为高手的技术》之联机学习(174)
  73. Codejam Qualification Round 2019(174)
  74. Weblogic CVE-2019-2647等相关XXE漏洞分析(173)
  75. python爬虫重定向次数过多问题(172)
  76. simulink创建简单模型(172)
  77. 强大的jQGrid的傻瓜式使用方法。以及一些注意事项,备有相应的引入文件。(170)
  78. [NewLife.XCode]高级查询(168)
  79. Algolia使用教程 , 超详细傻子看都会(166)
  80. Delphi 开发微信公众平台 (二) 用户管理(165)
  81. 核心算法缺位,人工智能发展面临“卡脖子”窘境(165)
  82. 告诉你去越南芽庄必带回的好东西(163)
  83. 只需知道电话号码 即可监控任意一部手机,获取位置,太可怕(163)
  84. 范斯晶对祖母的称呼很意外,范志毅很心疼,缺少母爱的孩子不容易(162)
  85. 如何定位前端线上问题(如何排查前端生产问题)(162)
  86. 百度网盘下载神器 PanDownload v2.0.9(破解版、不限速)(160)
  87. 双双出轨!许志安劈腿马国明港姐女友,二人被拍16分钟激吻超20次(160)
  88. 数学家发现完美的乘法(160)
  89. 定义工作,解读自我——IT帮2019年2月线下活动回顾(160)
  90. 高管被警方带走背后:巧达科技操盘2亿人简历生意(159)
  91. 吹爆惠英红,《铁探》这位霸道总警司超带感!真乃港剧罕见大女主(157)
  92. vue生成图片验证码(156)
  93. 三国正史第一猛将:一人单挑数千人,不是吕布也不是关羽(155)
  94. 从0到1上线一个微信小程序(154)
  95. FreeSql 如何现实 Sqlite 跨库查询(154)
  96. 向佐的弟弟叫向佑,网友:那郭碧婷生的孩子叫什么?(153)
  97. [Node.js] 3、搭建hexo博客(153)
  98. spring-boot-2.0.3不一样系列之源码篇 - pageHelper分页,绝对有值得你看的地方(153)
  99. TensorFlow从1到2(十)带注意力机制的神经网络机器翻译(152)
  100. java基础(十五)----- Java 最全异常详解 ——Java高级开发必须懂的(152)

  1. 函数优化实战
  2. numpy数组之存取文件
  3. 曾之乔眼眶泛红爆哭! 5万粉虐心看10秒 最后一刻笑了
  4. 自杀式选角
  5. 登陆Linux服务器时触发邮件提醒
  6. 风暴中的华为员工信首次公布:女朋友停止吵架,家人劝不要做逃兵
  7. 莫迪大胜,对中国意味着什么?
  8. 搞假材料欺骗中央,书记区长双双被免
  9. 小白入门AI教程:教你快速搭建大数据平台『Hadoop+Spark』
  10. MySQL 事务
  11. [Inside HotSpot] Serial垃圾回收器 (二) Minor GC
  12. 老婆举报医生老公“收药品回扣”:他出轨并要求离婚 官方已介入调查
  13. 实验吧简单的sql注入3
  14. 死磕 java同步系列之自己动手写一个锁Lock
  15. [NOI2006] 网络收费
  16. 线性基的小证明...
  17. 从语言设计的角度探究Java中hashCode()和equals()的关系
  18. C# 多线程小试牛刀
  19. Python基础:输入与输出(I/O)
  20. link-1-STL 标准模板库
  21. mysql--浅谈多表查询1
  22. 进击JavaScript核心 --- (1)基本数据类型
  23. 大数据技术之_24_电影推荐系统项目_07_工具环境搭建(具体实操)
  24. 前端限制显示的文本字数的几种方法——不换行与换行
  25. 【实验吧】该题不简单——writeup
  26. 反向传播算法
  27. =、==、===、equals()的区别
  28. GitHub 推出开发者赞助项目
  29. 剑指Offer的学习笔记(C#篇)-- 从上往下打印二叉树
  30. argparse 在深度学习中的应用
  31. 张云雷复出?西城区文旅局:德云社在辖区内演出未发现违法违规问题
  32. Maven安装与配置
  33. acWing 825. 排队购物
  34. ajax&&jquery
  35. 苏联攻击机的悲壮行动,明知德军战机拦截,仍在无护航状态下出击
  36. 华为的5G技术,源于这种数学方法
  37. 一站式自动化测试平台 http://www.Autotestplat.com
  38. RabbitMQ总结
  39. 第九组 通信3班 063 自反ACL
  40. 短线还有最后一跌?大V们表示:反弹近了!(5月23日)
  41. 第九组 通信3班 063 OSPFv2与OSPFv3综合实验
  42. C# IE选项 - 重置IE
  43. Spring_数据校验和自定义检验规则
  44. 谈谈Java的string为什么是不可变的
  45. OFFICE 365 A1 Plus账号注册
  46. 初学python—做一个数组的增删改查操作
  47. oc工程中oc、swift混编代码打包成静态framework踩坑笔记
  48. 阿里云推“智能秒停系统”:50秒内短信通知 再不怕吃罚单
  49. 今天购买了一个云服务器
  50. 神奇!乌鸦竟然会传达悲观和怀疑情绪 还会对同伴“冷嘲热讽”
  51. 数字IC设计入门必备——VIM自定义模板调用与VCS基本仿真操作示例
  52. 点击事件的坐标计算(client || offset) +(X || Width || Left) 各种排列组合别绕晕
  53. windows下dubbo-admin2.6.x之后版本的安装
  54. linux 之基本命令学习总结
  55. 传祺难续“传奇”?销量暴跌超4成 加价卖车被“断裂门”尽毁
  56. 香港豪门后宫持续曝光:他用选美比赛“选妃”,与几万女星交往
  57. 小窥React360——用React创建360全景VR体验
  58. Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)
  59. .Net Core下使用RabbitMQ比较完备的两种方案(虽然代码有点惨淡,不过我会完善)
  60. “80后”女博士已任团中央书记处书记
  61. 杨元庆:现在是联想的最好时刻 我们四大战役全部打了胜仗
  62. Java开发环境的搭建(JDK和Eclipse的安装)
  63. oracle学习笔记(十四) 数据库对象 索引 视图 序列 同义词
  64. 机构风向标:外资出逃超500亿 美的集团等白马股表现欠佳
  65. 跟踪记录ABAP对外部系统的RFC通信
  66. c++11多线程详解(一)
  67. 小蓝杯,跌破发行价了
  68. [NewLife.XCode]百亿级性能
  69. 33岁何洁商场走穴被曝光,路人镜头下的她与精修图差别好大
  70. 途牛第一季度净亏损2240万美元 同比亏损幅度扩大
  71. 00 | Two Sum
  72. 智能威胁分析之图数据构建
  73. 快速掌握RabbitMQ(二)——四种Exchange介绍及代码演示
  74. Neo4j 第六篇:Cypher语法
  75. Java微信公众平台开发(三)--接收消息的分类及实体的创建
  76. Java8 中的 Optional
  77. 如何显示超大图像(3)
  78. 贵州检察机关依法对袁仁国决定逮捕
  79. 有关xerospolit运行报错问题的有效解决方案
  80. ADO学途 one day
  81. Linux 中 ip netns 命令
  82. Python爬虫之设置selenium webdriver等待
  83. BSOJ1040 -- 【练习题目】美元DOLLARS
  84. 外媒:稀土是中国手中的一张王牌
  85. sql server添加sa用户和密码
  86. 深入理解JVM的类加载
  87. querySelector和getElementById之间的区别
  88. 简说设计模式——观察者模式
  89. 扰动函数和拉链法模拟HashMap的存储结构
  90. 东芝中国:“上海东芝公司”不存在 未停止与华为的合作
  91. 彭于晏马思纯主演张爱玲这部小说,却被说更适合演《骆驼祥子》?
  92. 停止向华为供货?东芝辟谣回应
  93. 云米第一季度净利润5310万元 同比增长68%
  94. 贪吃的古蛙,古生物学家发现亿年前两栖动物之间战争
  95. APICloud发布低代码开发平台 效率提升30%至60%
  96. Golang 读写锁RWMutex 互斥锁Mutex 源码详解
  97. shell初级-----数据呈现方式
  98. 白玉兰入围名单公布!《知否》《都挺好》上榜,还有这部豆瓣3分剧
  99. 深网 | 京东618接入快手、抖音 实现“即看即买”
  100. 解决 APP启动白屏黑屏问题