Яким чином машупи працюють з політикою того ж самого орґіна?


11

Якщо Javascript дозволений лише для доступу до скриптів з одного домену, то як веб-сайт може створювати параметри, які повинні читати та змінювати вміст з іншого домену?

Відповіді:


7

Рішення для перехресних браузерів

JSONP

Якщо 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

У Internet Explorer є запит між доменами

Firefox

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, але я б не розраховував на те, що користувач змінить налаштування у своєму браузері.


0

Для цього можна використовувати API (іншого домену). Ваш Javascript викличе файл PHP (або інший файл сценарію), який знаходиться на вашому веб-сервері (вашому домені), який зателефонує в API (іншого домену за допомогою CURL) і отримає відповідь вам.


Ця відповідь не повинна бути такою конкретною щодо технології, яка використовується на сервері.
funkybro

@funkybro Так, це був лише приклад ... нічого конкретного ...
Harish Kurup
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.