27

聊一聊JSONP和图像Ping的区别

 4 years ago
source link: http://www.cnblogs.com/zhangguicheng/p/12776189.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

JSONP

在讲 JSONP 之前需要再来回顾一下在页面上使用 script 引入外部的 js 文件时到底引入了什么?

先建立一个 index.js 文件。

console.log(123)

再建立一个 index.html 文件。

<!DOCTYPE html>
<html lang='en'>
  <head>
    <meta charset='utf-8'>
    <title>JSONP</title>
  </head>
  <body>
    <script src='index.js'></script>
  </body>
</html>

上面的

<script src='index.js'></script>

等价于

<script>
	console.log(123)  
</script>

现在再来看 JSONP 就比较好理解了。

假设我现在需要向 www.abc.com 上请求一个资源 asset。我需要先创建一个 script 标签令其 src 等于这个源来访问这个资源

<script src= 'http://www.abc.com/?dataName=asset&callback=handleResponse'></script>

根据上面的举例我们知道 script 返回的就是一段 JS 代码,那么服务器在接收到我们的请求时,如果给我们返回一段 JS 代码,这段代码可以是一个函数执行的代码,而且函数的参数可以就是我们请求的资源。

例如上面的 handleResponse 函数在本地的定义如下:

handleResponse(asset) {
  console.log('从服务端得到的资源 asset 为', asset)
}

服务端给我们返回的 JS 代码如下:

handleResponse(asset)

在script 标签就相当于

<sctript>
  handleResponse(asset)
</sctript>

handleResponse 在本地又有定义,服务端的资源 asset 也通过函数参数的形式传递下来了。

由于 asset 的形式往往是 JSON 的格式,所以这种跨域的方式被称为 JSONP。

JSONP 由两部分构成,

  • 参数(JSON格式,就是服务端需要传递给客户端的数据

  • 回调函数

    名字要和浏览器端代码中定义的名字相同,在上面的例子中浏览器端定义的是 handleResponse ,在服务端返回的函数名字也应该是 handleResponse ,只有这样在浏览器端接收到后才能进行调用。

图像 Ping

我们知道使用 script 标签返回的是一段 JS 代码,请问下面这段代码返回的是什么。

<img src='http://www.abc.com/?dataName=img1'>

往往返回的是一张图片,因此浏览器端是没有办法接收到服务端的返回值的。

虽然它不像 JSONP 使用那么广泛,但是还是有一定的用武之地的。

例如用于统计某个广告的点击次数,创建一个 img 标签,然后绑定一个 click 事件,当点击图片时给 img.src 赋值,这个时候就会向 'http://www.abc.com/count' 发送请求,服务端在接收到这个请求之后就可以令点击次数加 1.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <script>
    const img = document.createElement('img')
    img.onclick = function () {
      img.src='http://www.abc.com/count'
    }
    document.appendChild(img)
  </script>
</body>
</html>

注意这个例子并不严谨,这里主要是说明统计点击某个广告次数的思路,使用图像 Ping 是可以实现的。


Recommend

  • 97
    • blog.cyeam.com 6 years ago
    • Cache

    说说 JSONP 和 XSS

    27 October 2017

  • 17

    利用JSONP进行水坑攻击 大学生 ·

  • 6

    JSONP挖掘与高级利用 蚁逅 ·...

  • 62
    • blog.yangerxiao.com 5 years ago
    • Cache

    探索AJAX和JSONP | 杨二

  • 3
    • lotabout.me 3 years ago
    • Cache

    JSONP 简介

    JSONP 简介Table of ContentsJSONP 不是 JSON,它是跨域访问的一种机制。那么什么是跨域访问?什么是 JSONP?如果你不清楚的话,不妨点开看看吧。 曾经想做一个“豆瓣FM”的第三方客户端,用的是 node-webkit,即可以用 H...

  • 5
    • www.biaodianfu.com 3 years ago
    • Cache

    Python JSON/JSONP数据解析

    JSON简介 JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。

  • 9
    • netsecurity.51cto.com 3 years ago
    • Cache

    一次实战之JSONP 漏洞

    描述 Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。 为什么我们从不同的域(网站)访问数据需要一个特殊的技术(JSONP )呢?这是因为同源策略。

  • 4
    • www.cnblogs.com 2 years ago
    • Cache

    java~jsonp的使用

    对于一个后端程序来发,它可能会被多个应用调用,而跨域的问题就来了,使用jsonp来解决这个问题是个不错的方式,下面说一下关于jsonp的知识 JSONP不是新技术,只是在页面上响应一段js 对于响应的 MIME type ('text/plain')需要注解,它由...

  • 8

    How do I create a JSONP from an external JSON stream? advertisements I have two domains: www.domain1.com and www.domain2.com I have a p...

  • 0
    • developer.51cto.com 1 year ago
    • Cache

    聊一聊关于JDK、JRE 和 JVM 的区别

    聊一聊关于JDK、JRE 和 JVM 的区别-51CTO.COM 聊一聊关于JDK、JRE 和 JVM 的区别 作者:y, xz 2022-06-27 08:24:34 开发

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK