跨域技术JSONP

来源:互联网 发布:nginx整合php 编辑:程序博客网 时间:2024/06/05 19:50

JSONP是JSON with padding(填充式JSON或参数式JSON)的简写,是应用JSON的一种新方法,在后来的Web服务中非常流行。JSONP看起来与JSON差不多,只不过是被包含在函数中调用的JSON

如下:

callback({"name":"Nicholas"});

JSONP组成

JSONP由两部分组成:回调函数和数据

回调函数

当响应到来时在页面中调用的函数,回调函数的名字一般是在请求中指定的

数据

数据就是传入回调函数中的JSON数据

典型的JSONP请求如下所示:

http://freegeoip.net/json/?callback=handleResponse

这个URL是在请求一个JSONP地理定位服务。通过查询字符串来指定JSONP服务的回调参数是很常见的,像上面的URL所示,指定的回调函数的名字叫做handleResponse()

实现原理

JSONP是通过动态<script>元素来使用的,首先为src属性指定一个跨域URL。这里的<script>元素和<img>,都有能力不受限制地从其他域加载资源。

总结:但凡具有src或者href类似可以引用外部资源的属性的标签都可以实现跨域

因为JSONP是有效的javascript的代码,所以请求完成后,即再JSONP响应加载到页面中以后,就会立即执行。

function handleResponse(response){    alert("You are at IP address" +response.ip+",whitch is in"+response.city +","+response.region_name);    }    var script = document.createElement("script");    script.src = "http://freegeoip.net/json/?callback=handleResponse";    document.body.insertBefore(script,document.body.firstChild);

这个例子通过查询地理定位服务来显示你的IP地址和位置信息

JSONP优点

能够直接访问响应文本,支持在浏览器与服务器之间的双向通信

JSONP的不足

1、JSONP从其他域中加载代码执行。如果其他域不安全,很可能会在响应中夹带一些恶意代码
2、要确定JSONP请求是否失败并不容易。虽然HTML5给script元素新增了一个onerror事件处理程序,但目前还没有浏览器支持,因此开发人员不得不使用计时器检测指定时间内是否接收到了响应。

JSONP应用

使用JSONP跨域的步骤:
1、创建一个script标签
2、指定src和type
3、将标签追加到文本内容中

注意:在指定src的时候需要追加callback回调函数,用&连接起来

其他跨域技术

  • 服务器代理
  • document.domain
  • window.name
  • CSST
  • CORS
  • flash
  • window.postMessage
  • location.hash
  • HTML5的WebSocket
0 0
原创粉丝点击