zoukankan      html  css  js  c++  java
  • Jsonp实现跨域原理

    跨域:域名或端口号不同都属于不同的域;即只要访问的地址URL中域名或端口号不同就出现了跨域问题。

    我们使用ajax调用服务端的接口,服务端不管你请求是否是同一个域下,只管响应,于是我们可以看到服务端响应的头信息,但是当数据经过浏览器时,浏览器判断出js访问的数据来自不同的域,于是便拒绝将数据返给页面,即使我们拿到了Response信息,也无法展示内容。 

    解决办法:Jsonp

    前提:利用js可以跨域加载js文件的特性来绕过跨域请求。

    1、在跨域获取信息的js中添加一个函数,该函数有返回值data

    2、发起跨域请求的一端引入服务端定义好的一个js文件,请求参数中是带callback回调函数的,并且callback=mycall中的"mycall"一定是与添加的那个函数名称一致;

    3、服务端收到请求就进行响应,并且判断参数中是否有callback参数,如果有,则要对返回参数进行处理,加工成一端js代码(就是把json串包装成一个js函数,mycall({id:1,name:z})),然后响应。

      jsonp本来就是要请求访问服务器端的一个js文件,现在返回的是Js代码,于是浏览器可以不再进行拦截直接进行响应。

    客户端:

    使用JQuery客户端:只需要在ajax请求时指定dataType为jsonp,jQuery便会帮我们自动为我们加上了回调函数,而且随机为我们添加了函数名为”jQuery1764509”的函数。 

    服务端:

    1、将原来返回e3Result类型改为返回String类型,而且添加一个callback参数

    2、判断是否有callback参数,如果有就是跨域请求,把result转换成json串并且包装成一个js函数,返回;如果没有,就不是跨域请求,直接将result转换成json串返回。

  • 相关阅读:
    Java--NIO(一)
    Jackson
    SpringBoot整合Redis作为缓存
    RabbitMq学习笔记——配置
    RabbitMq学习笔记——概念
    利用gsoap工具,通过wsdl文件生成webservice的C++工程文件
    QThreadPool&QRunnable&类函数的使用
    C++构造函数初始化列表与构造函数中的赋值的区别
    Qt 4.8.2.+VS2008静态编译
    Qt开发的程序在没有安装Qt环境的机器上可能出现的一些问题
  • 原文地址:https://www.cnblogs.com/xiaoxli/p/9633191.html
Copyright © 2011-2022 走看看