Как обойти политику того же происхождения для стороннего https-сайта?

У меня есть сайт http://, которому требуется доступ к стороннему JSON API, который доступен на сайте https://. Я прочитал Способы обойти политику одного и того же происхождения, но кажется, что описанные там методы мне не подходят:

  1. Метод document.domain — работает только с поддоменами.
  2. Метод совместного использования ресурсов между источниками — требует взаимодействия с сервером.
  3. Метод window.postMessage — похоже, требуется открытие всплывающего окна?
  4. Метод обратного прокси-сервера – возможное решение, но его настройка слишком сложна.
  5. http://anyorigin.com — кажется, не поддерживает SSL.

Это все? Должен ли я реализовать решение 4, которое кажется довольно сложным, или я что-то упускаю?


person ripper234    schedule 06.10.2011    source источник
comment
Разве вы не можете СВЕРНУТЬ результат с другого сайта с помощью обычной PHP-страницы в своем собственном домене, а затем получить JSON с этой PHP-страницы?   -  person Peter Ajtai    schedule 07.10.2011
comment
Здесь не подойдет JSONP?   -  person jwueller    schedule 07.10.2011
comment
Я почти уверен, что anyorigin.com поддерживает SSL. Попробуйте, например, получить https://test.kems.net/ — все отлично работает.   -  person David Titarenco    schedule 07.10.2011
comment
Я не эксперт JSON, но я думаю, что вам следует предоставить дополнительную информацию о стороннем JSON API, который доступен на сайте https://. Насколько он гибкий?   -  person curiousguy    schedule 07.10.2011
comment
@curiosguy - это API. Не очень гибкий. mtgox.com/api/0/data/ticker.php   -  person ripper234    schedule 07.10.2011
comment
@ Дэвид - мой плохой, спасибо! Я разместил это как ответ.   -  person ripper234    schedule 07.10.2011
comment
@DavidTitarenco - Хм, несколько недель он работал нормально, но теперь он начал возвращать значение null для некоторых https-сайтов. Например, попробуйте скормить https://bitcointalk.org/ любому источнику.   -  person ripper234    schedule 23.10.2011
comment
Я написал ответ на этот вопрос здесь: Загрузка междоменной HTML-страницы с помощью jQuery AJAX   -  person jherax    schedule 26.06.2014


Ответы (3)


Извините, кажется, что anyorigin.com поддерживает https.

Причина, по которой я наивно полагал, что это не так, заключается в том, что используемый API возвращает JSON, и я думал, что на самом деле получу простой текстовый ответ (как в моих тестах с использованием anyorigin.com на google.com). Когда он вернул только object, я подумал, что что-то сломалось.

Похоже, объект просто возвращает проанализированный JSON, так что все готово!

Обновление. Anyorigin.com перестал работать с некоторыми https-сайтами через несколько недель после публикации этого сообщения, поэтому я написал whateverorigin.org, альтернатива anyorigin с открытым исходным кодом.

person ripper234    schedule 07.10.2011
comment
@RobW - пожалуйста, откройте вопрос на github. Я рассмотрю это в пятницу (скорее ничего не обещаю) - github.com/ripper234/Whatever-Origin - person ripper234; 22.05.2012
comment
эти методы не будут работать, если удаленный сервер возвращает другой контент в зависимости от того, кто что-то запрашивает. Например, YouTube возвращает веб-страницу для видео, из которой вы можете извлечь URL-адрес воспроизведения, скажем, для MP4, который будет работать (скажем, для загрузки в виде файла .mp4), если используется от вызывающего абонента, а не от клиента вызывающего абонента (когда вызывающий абонент прокси) - person George Birbilis; 19.08.2013
comment
Я написал ответ на этот вопрос здесь: Загрузка междоменной HTML-страницы с помощью jQuery AJAXпоследняя, ​​поддерживает https - person jherax; 26.06.2014

Вы можете использовать Ajax-кросс-происхождение плагин jQuery. С этим плагином вы используете перекрестный домен jQuery.ajax().

Его очень просто использовать:

    $.ajax({
        crossOrigin: true,
        url: url,
        success: function(data) {
            console.log(data);
        }
    });

Вы можете прочитать больше здесь: http://www.ajax-cross-origin.com/

person Ninioe    schedule 03.08.2014

JSONP должен быть в вашем списке и выше. Почти стандарт. Это требует взаимодействия с сервером, но большинство API должны знать, что они делают, и поддерживать это.

здесь реальное базовое описание того, как это работает

person Mike Ruhlin    schedule 06.10.2011