作家
登录

前端跨域请求原理及实践

作者: 来源: 2017-05-25 11:45:23 阅读 我要评论

  •     res.end() 
  •  
  • })  
    1. <script src = 'http://localhost:3001/jsonServerResponse?jsonp=jsonpCallback'></script> 

    这里必定要留意 data 中字符串拼接,不克不及直接将 JSON 格局的 data 直接传给回调函数,不然会产生编译缺点: parsererror Error: jsonpCallback was not called。

    其实脑海里应当有一个概念:应用 JSONP 格局返回的值一段要急速履行的 JavaScript 代码,所以不会像 ajax 的 XmlHttpRequest 那样可以监听不合事宜对数据进行不合处理。

    处理结不雅如下所示:

    那么数据是若何传输的呢?HTTP 请求头的第一行如下:

    经由膳绫擎的事宜,你是不是认为 JSONP 的实现和 Ajax 大年夜同小异?

    其实,因为实现的道理不合,由 JSONP 实现的跨域调用不是经由过程 XmlHttpRequset 对象,而是经由过程 script 标签,所以在实现道理上,JSONP 和 Ajax 已经一点关系都没有了。看上去情势类似只是因为 jQuery 对 JSONP 做了封装和转换。

    比如在膳绫擎的例子中,我们假设要传输的数据 data 格局如下:

    1. pp.post('/ajax/deal'function(req, res) { 
    2.  
    3.     console.log("server accept: ", req.body.name, req.body.id) 
    4.  
    5.     var data = { 
    6.  
    7.         name: req.body.name + ' - server 3000 process'
    8.  
    9.         id: req.body.id + ' - server 3000 process' 
    10.  
    11.     } 
    12.  
    13.     res.send(data) 
    14.  
    15.     res.end() 
    16.  
    17. })  
    1.  
    2. name"chiaki"
    3.  
    4. id": "3001" 
    5.  
    6.  
    1. GET /ajax/deal?callback=jsonpCallback&name=chiaki&id=3001&_=1473164876032 HTTP/1.1 

    可见,即使情势上是用 POST 传输一个 JSON 格局的数据,其实发送请求时照样转换成 GET 请求。

    其实如不雅懂得 JSONP 的道理的话就不难解得为什么只能应用 GET 请求办法了。因为是经由过程 script 标签进行请求,所以上述传输过程根本上是以下的情势:

    1. <script src = 'http://localhost:3001/ajax/deal?callback=jsonpCallback&name=chiaki&id=3001&_=1473164876032'></script> 

    Specifies the method or methods allowed when accessing the resource. This is used in response to a preflight request. The conditions under which a request is preflighted are discussed above.

    • Access-Control-Allow-Headers

    如许大年夜办事器返回的代码就可以直接在这个 script 标签中运行了。下面我们本身实现一个 JSONP:

    1. function jsonpCallback(data) { 
    2.  
    3.     console.log("jsonpCallback: "+data.

        推荐阅读

        PinDemonium通用动态脱壳工具

      一、简介本文是对16年的blackhat大年夜会上PinDemonium通用动态脱壳对象介绍。1. 通用脱壳对象简介通用脱壳对象可以经由过程以下办法实现: -debuggers -kernel modules -hyperv>>>详细阅读


      本文标题:前端跨域请求原理及实践

      地址:http://www.17bianji.com/lsqh/35417.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)