跨站数据请求哪家强——青出于蓝的jsonp
/*
* 跨站数据请求哪家强——青出于蓝的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的更多相关文章
- web攻击之二:CSRF跨站域请求伪造
CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click ...
- 防御CSRF的方法有哪些(一) HTTP 头中自定义属性并验证 CSRF跨站域请求伪造攻击
CSRF (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下 ...
- CSRF(Cross Site Request Forgery, 跨站域请求伪造)
CSRF(Cross Site Request Forgery, 跨站域请求伪造) CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的 ...
- 第二百七十一节,Tornado框架-CSRF防止跨站post请求伪造
Tornado框架-CSRF防止跨站post请求伪造 CSRF是什么 CSRF是用来在post请求时做请求验证的,防止跨站post请求伪造 当用户访问一个表单页面时,会自动在表单添加一个隐藏的inpu ...
- 转: CSRF(Cross Site Request Forgery 跨站域请求伪造) 背景与介绍
from: https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/ 在 IBM Bluemix 云平台上开发并部署您的下一个应用 ...
- Web安全之跨站伪造请求(CSRF)
CSRF简介 CSRF全称跨站伪造请求(Cross-site request forgery)也称为one click attack/session riding,还可以缩写为XSRF 通俗说就是利用 ...
- [oldboy-django][4python面试]有关csrf跨站伪造请求攻击
1 csrf定义 - csrf定义:Cross Site Request Forgery,跨站请求伪造 举例来说: 网站A伪造了一个图片链接: <a href="http://www. ...
- 用shell脚本批量进行xss跨站攻击请求
由于执行的xss攻击请求他多了,初步估计要执行83次,而且还要执行3篇,如果手工一个一个去执行,说出去,我还配叫自动化大师吗: 有鉴于此,边打算自己编写一个脚本进行批量执行: 而短脚本的编写,非she ...
- CSRF跨站伪造请求
一.什么是CSRF CSRF(Cross Site Request Forgery) 跨站请求伪造.也被称为One Click Attack和Session Riding,通常缩写为CSRF或XSRF ...
随机推荐
- 关于Genymotion无法启动虚拟设备的问题解决
只针对于该问题的解决,只需要将该虚拟机的网络设为混杂模式即可. 具体原因,未知.,设置如下
- java8之stream
lambda表达式是stream的基础,初学者建议先学习lambda表达式,http://www.cnblogs.com/andywithu/p/7357069.html 1.初识stream 先来一 ...
- 设计模式(4)--AbstractFactory(抽象工厂模式)--创建型
1.模式定义: 抽象工厂是应对产品族概念的,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类 2.模式特点: 抽象工厂模式为创建一组对象提供了一种解决方案.与工厂方法模式相比,抽象工 ...
- IPv4地址分类及子网划分
IPv4地址分为A,B,C,D,E类: A类:1.0.0.0~126.255.255.255,默认子网掩码/8,即255.0.0.0 (其中127.0.0.0~127.255.255.255为环回地址 ...
- maven3自定义archetype
maven使用起来还是很方便,但默认自带的archetype配置junit版本比较老.每次创建新项目都要手动修改junit版本,所以就想着能不能自己建一个新版本出来,省得每次手动修改的麻烦. 网上找了 ...
- Attribute(特性)与AOP
提到特性,好多人都会疑惑特性(attribute),和注释有什么区别,简单来说,特性是给机器看的,而注释是给人看的. 特性不仅可以影响编译还可以影响运行,而注释只是为了让人更加容易理解.看懂代码而特别 ...
- 环境配置-云服务器jdk与tomcat配置
我所实践的主机是麻花疼云的主机,第一次试用30天,装了个centos6.5,其实已经用商用专用镜像配置好环境了,包括jdk.tomcat等常用的内容,但是我实在是找不到他们安装在哪个目录下了,我就自己 ...
- 一次由SELinux引起的ssh公钥认证失败问题
一直使用CentOS作为服务器系统,平时装完系统以后都是建立publickey认证机制,然后关闭密码认证.原本是一件轻车熟路毫无压力的事情,不想前日新装一台机器按照正常配置以后居然使用publicke ...
- spring-session 共享
Spring session 共享 一.引入依赖 <dependency> <groupId>redis.clients</groupId> <artifac ...
- python---统计列表中数字出现的次数
import collections a = [1,2,3,1,2,3,4,1,2,5,4,6,7,7,8,9,6,2,23,4,2,1,5,6,7,8,2] b = collections.Coun ...