Якщо Javascript дозволений лише для доступу до скриптів з одного домену, то як веб-сайт може створювати параметри, які повинні читати та змінювати вміст з іншого домену?
Якщо Javascript дозволений лише для доступу до скриптів з одного домену, то як веб-сайт може створювати параметри, які повинні читати та змінювати вміст з іншого домену?
Відповіді:
Якщо API, до якого ви намагаєтеся отримати доступ, підтримує JSONP , вам потрібно лише вказати ім'я функції javascript у вашому запиті, тоді JSONP повертає javascript, myfunc({the:data});
який можна запускати як звичайний javascript, і саме тому ви б створили новий <script src="www.website.com/somecall?jsonp=myfunc">
тег для "надіслати запит" (jQuery робить це автоматично, якщо ви використовуєте type: jsonp
в $.ajax
запитах).
Мінус полягає в тому, що він вимагає від постачальника API підтримки JSONP.
Flash може отримати доступ до вмісту міждоменних версій, якщо цільовий веб-сайт має в crossdomain.xml
корені файл, який говорить про те, що він дозволяє, що зазвичай відбувається на серверах, які надають API).
Мінус полягає в тому, що для його роботи потрібен Flash у веб-переглядачі користувача, а веб-сайт, з якого ви отримуєте дані, повинен мати crossdomain.xml, який дозволяє запити між доменами.
Мови на стороні сервера, такі як PHP, не мають обмежень для одного і того ж домену BS, тому у вас може бути сценарій, який діє як проксі (наприклад, завантажуйте через одне з розширень http, як cURL).
Додатковою перевагою є те, що ви можете очистити дані (або навіть перемішати кілька джерел) на сервері, перш ніж переслати їх на вашу веб-сторінку / javascript, щоб ви могли навіть витягти лише корисну частину даних, що добре, коли ви робите мобільний веб-сервер де пропускна здатність може бути проблемою.
Мінус полягає в тому, що всі запити повинні проходити через ваш сервер, щоб збільшити навантаження на ваш сервер.
Однак перевага полягає в тому, що він буде працювати з будь-яким ресурсом, оскільки він не потребує цілі, щоб підтримувати кросдомен або jsonp. Тож якби нічого іншого не працювало, це було б.
У Internet Explorer є запит між доменами
Firefox 3.5+ має стандарт спільного використання , але він потребує ресурсу, до якого ви намагаєтесь отримати доступ, щоб включити спеціальні заголовки, наприклад, в PHP:
header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");
Кілька інших основних браузерів також підтримують це , тому якщо вам не потрібно підтримувати старі браузери і якщо ви можете отримати ресурси, до яких ви намагаєтесь отримати доступ, щоб надіслати ці заголовки, це може бути найкращою ставкою, інакше на сервері сценарій був би моєю рекомендацією.
Firefox також має налаштування користувача capability.policy.default.XMLHttpRequest.open
, але я б не розраховував на те, що користувач змінить налаштування у своєму браузері.
Для цього можна використовувати API (іншого домену). Ваш Javascript викличе файл PHP (або інший файл сценарію), який знаходиться на вашому веб-сервері (вашому домені), який зателефонує в API (іншого домену за допомогою CURL) і отримає відповідь вам.