/*
* 跨站数据请求哪家强——青出于蓝的jsonp数据格式
* @author gj
* @date 2017-09-15
*/

先哲有云“青,取之于蓝,而青于蓝;冰,水为之,而寒于水”大抵人们用这句来描述1.0版本很牛逼2.0版本也不怂。本文所牵涉的json与jsonp两者的关系大概如此(仅限前端领域)。

使用背景

出于产品的要求要将两个项目的数据进行交互,即A站web页面要获取B站的实时数据。当然做个数据接收发送接口文件也可以,但考虑到项目的独立性与维护成本决定还是以前端技术来处理此需求。前端数据交互的格式就那几种,其中json格式以轻巧的外观,优秀的兼容性为程序猿们所喜闻乐见。但av8d都知道Ajax直接请求站外数据、文件存在跨域的访问的问题,这就尴尬了。此诚危急存亡之秋也!然忽闻一声炮响,五阵中金鼓乱鸣,旌旗齐展,一位少年纵骑奔出,人似虎,马如龙,正是Jsonp!!!

What is the jsonp?

以下内容来自百度百科(^_^)。

JSONP(JSONwithPadding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于server1.example.com的网页无法与不是server1.example.com的服务器沟通,而HTML的<script>元素是一个例外。利用<script>元素的这个开放策略,网页可以得到从其他来源动态产生的JSON资料,而这种使用模式就是所谓的JSONP。用JSONP抓到的资料并不是JSON,而是任意的JavaScript,用JavaScript直译器执行而不是用JSON解析器解析。

How to use the jsonp?

此带码段以jQueryo为背景框架:

jQuery.ajax({
url:"http://xxx.com/index.php?app=wap&mod=Live&act=LiverListAll",
type:"GET",
dataType:"jsonp",//注意这里有个p!!
jsonp:"jsoncallback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名
success:function(result){
if(result.live_status == 1){
var live_str;
for(i in result.live_list){
alert(result.live_list[i].title) ;
//alert(result.live_list[i].title);
} }
},
error:function(){
}
})

服务端返回数据也要进行一些改动,这里以PHP 语言为例:

echo $_GET['jsoncallback'] . "(".json_encode($return_data).")";//此用的$_GET['jsoncallback'] 与上面前端代码中的jsonp:"jsoncallback"相对应。

大功能告成,如此就可以完成前端数据的跨域传输问题。

PS:

其实jsonp从严格意义上来说并不属于一种数据格式,上面代码中的dataType:"jsonp"让人以为这是隶属于ajax的一种数据格式,其实不然,只是jquery框架把jsonp扩展到了ajax的相关处理逻辑中了。jsonp的核心是动态生成<script>标签来提供数据源,因为script标签是不存在跨域问题的。而ajax的原理XMLHttpRequest。

 

跨站数据请求哪家强——青出于蓝的jsonp的更多相关文章

  1. web攻击之二:CSRF跨站域请求伪造

    CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click ...

  2. 防御CSRF的方法有哪些(一) HTTP 头中自定义属性并验证 CSRF跨站域请求伪造攻击

    CSRF (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下 ...

  3. CSRF(Cross Site Request Forgery, 跨站域请求伪造)

    CSRF(Cross Site Request Forgery, 跨站域请求伪造) CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的 ...

  4. 第二百七十一节,Tornado框架-CSRF防止跨站post请求伪造

    Tornado框架-CSRF防止跨站post请求伪造 CSRF是什么 CSRF是用来在post请求时做请求验证的,防止跨站post请求伪造 当用户访问一个表单页面时,会自动在表单添加一个隐藏的inpu ...

  5. 转: CSRF(Cross Site Request Forgery 跨站域请求伪造) 背景与介绍

    from:  https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/   在 IBM Bluemix 云平台上开发并部署您的下一个应用 ...

  6. Web安全之跨站伪造请求(CSRF)

    CSRF简介 CSRF全称跨站伪造请求(Cross-site request forgery)也称为one click attack/session riding,还可以缩写为XSRF 通俗说就是利用 ...

  7. [oldboy-django][4python面试]有关csrf跨站伪造请求攻击

    1 csrf定义 - csrf定义:Cross Site Request Forgery,跨站请求伪造 举例来说: 网站A伪造了一个图片链接: <a href="http://www. ...

  8. 用shell脚本批量进行xss跨站攻击请求

    由于执行的xss攻击请求他多了,初步估计要执行83次,而且还要执行3篇,如果手工一个一个去执行,说出去,我还配叫自动化大师吗: 有鉴于此,边打算自己编写一个脚本进行批量执行: 而短脚本的编写,非she ...

  9. CSRF跨站伪造请求

    一.什么是CSRF CSRF(Cross Site Request Forgery) 跨站请求伪造.也被称为One Click Attack和Session Riding,通常缩写为CSRF或XSRF ...

随机推荐

  1. Netty SSL安全配置

    Netty SSL安全配置 [TOC] 摘要 在研发蜂鸟部署平台的过程中,涉及到平台网关和前置agent的通信加密,虽然目前软件在内网中,但是由于蜂鸟平台和agent的特殊性,一旦被控制,部署的软件就 ...

  2. PHP访问连接MYSQL数据库

    1.连接数据库       使用mysql_connect()函数建立与MySQL数据库的连接 源码:$con=mysql_connect("主机名或IP","用户名&q ...

  3. HDMI转MIPI DSI芯片方案TC358870XBG

    型号:TC358870XBG功能:HDMI1.4b转MIPI DSI通信方式:IIC分辨率:2560*1600@60fps/4k*2k@30fps电源:3.3/1.8/1.2/1.1封装形式:BGA8 ...

  4. python学习总结(面向对象进阶)

    -------------------类属性和实例属性关系------------------- 1.类属性和实例属性关系     1.实例属性         实例对象独有的属性     2.类属性 ...

  5. 基于SSM实现的简易员工管理系统

    之前自学完了JAVA基础,一直以来也没有做什么好玩的项目,最近暑假,时间上比较空闲,所以又学习了一下最近在企业实际应用中比较流行的SSM框架,以此为基础,通过网络课程,学习编写了一个基于SSM实现的M ...

  6. ios初体验< 运用属性传值,登录>

    注意:ViewController.m文件 // 在第一个页面中,创建一个简单的登录页面,并且添加两个属性 1 #import "ViewController.h" #import ...

  7. jsp fmt标签详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt326 JSTL标签提供了对国际化(I18N)的支持,它可以根据发出请求的客户 ...

  8. Spring AOP 通过order来指定顺序

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt398 Spring中的事务是通过aop来实现的,当我们自己写aop拦截的时候 ...

  9. html5 canvas元素使用(一)

    html5新增了一个canvas元素,用于在网页上生成一块矩形区域,用于绘制图像,功能非常强大,下面我来简单介绍一下 在页面中添加canvas <canvas id="canvasDe ...

  10. [自制操作系统] 原子操作&核间中断&读写锁&PRWLock

    本文主要为读论文Scalable Read-mostly Synchronization Using Passive Reader-Writer Locks的记录. 并将其在JOS上实现.其中包括la ...