跨站数据请求哪家强——青出于蓝的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 ...
随机推荐
- js调试的时候用console.log("变量"+scrollTop+windowHeight)
console.log("变量"+scrollTop+windowHeight) alert会打断程序,但是console.log("变量"+scrollTop ...
- [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
javascript面向对象编程方式,对于初学者来说,会比较难懂. 要学会面向对象以及使用面向对象编程,理解对象的创建在内存中的表示,至关重要. 首先,我们来一段简单的对象创建代码 var obj = ...
- Eclipse 安装插件(aptana、svn 、git、Java EE、JSHint)
转发9 1.安装 aptana 插件: * 依次点击:Help -> Install New Software... -> Add * 输入:http://download.aptan ...
- 【Js应用实例】图片预览
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 获取windows所有用户名
#include <LM.h> #pragma comment(lib, "netapi32.lib") // See more: http://msdn.micros ...
- spring学习笔记2---MVC处理器映射(handlerMapping)三种方式(附源码)
一.根据Beanname访问controller: 在springmmvc-servlet.xml的配置handlermapping中加入beanname,通过该beanname找到对应的contro ...
- PyQt4简单小demo
#coding=utf-8 import sys from PyQt4.QtCore import * from PyQt4.QtGui import * class FontPropertiesDl ...
- TensorFlow框架(5)之机器学习实践
1. Iris data set Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理.Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数据集,分为3类, ...
- 线性代数-矩阵-【4】点乘 C和C++的实现
点击这里可以跳转至 [1]矩阵汇总:http://www.cnblogs.com/HongYi-Liang/p/7287369.html [2]矩阵生成:http://www.cnblogs.com/ ...
- 基于SSM框架的文件上传
我整理了一下,这个办法在Servlet上应该也用得上.其实文件上传主要的问题是在于存储路径的拼接. 这里我是把东西存在Web项目的WebContent目录下的 下面贴一些代码 目标应该是这样一个格式 ...