JSONP

JSONP (англ. JSON with padding, «JSON з підкладкою») є розширенням JSON, коли ім'я функції зворотного виклику вказується як вхідний аргумент.

В основу технології покладено той факт, що політика безпеки браузера дозволяє використовувати тег <script type="text/javascript" src="..."></script> для звернення до сторонніх доменів.

Спочатку ідея була запропонована в блозі MacPython в 2005 році [1], і зараз використовується багатьма Web 2.0 застосунками, такими, як Dojo Toolkit Applications, Google Toolkit Applications, Kendo UI [2] і zanox Web Services. Подальші розширення цього протоколу були запропоновані з урахуванням введення додаткових аргументів, як, наприклад, у JSONPP [3] за підтримки S3DB вебсервісів.


Без використання технології JSONP (тобто використовуючи просто JSON кодування даних) сервер може повернути тільки дані. Наприклад так:

{"paper": "A4", "count": 5}

Однак це лише дані та вони не можуть впливати на браузер.

Використовуючи JSONP, сторонньому серверу передається в рядку виклику (GET) ім'я callback функції:

<script type="text/javascript" src="http://example.com/getjson?jsonp=parseResponse"></script>

Тут параметр jsonp містить ім'я callback функції parseResponse.

Тепер сторонній сервер example.com може повернути такий код:

parseResponse({"paper": "A4", "count": 5})

Тепер код викликає javascript-функцію першого домену.

Оскільки JSONP використовує скрипт-теги, виклики відкриті світу. З цієї причини, JSONP може бути недоречними для зберігання конфіденційних даних[4].

Включення скриптових тегів від віддалених сайтів дозволяє їм передати будь-який контент на сайті. Якщо віддалений сайт має вразливості, які дозволяють виконати Javascript ін'єкції, то початковий сайт також може зачеплений ними.

Дивись також

[ред. | ред. код]

Виноски

[ред. | ред. код]
  1. from __future__ import * » Remote JSON — JSONP. Bob.pythonmac.org. Архів оригіналу за 12 лютого 2012. Процитовано 8 вересня 2008.
  2. GWT Tutorial: How to Read Web Services Client-Side with JSONP. Архів оригіналу за 17 січня 2013. Процитовано 21 червня 2012.
  3. Almeida Jonas. JSON, JSONP, JSONPP?. — S3DB, . Архівовано з джерела 15 лютого 2017. Процитовано 2009-04-26.
  4. RIAspot. JSON P for Cross Site XHR. Архів оригіналу за 5 грудня 2008. Процитовано 21 червня 2012.