безопасный xmlhttprequest от небезопасной страницы - PullRequest
5 голосов
/ 28 мая 2010

Я хочу сделать запрос XMLHttpRequest для защищенного URI (https://site.com/ajaxservice/) из javascript, запущенного на небезопасной странице (http://site.com/page.htm).) Я пробовал все сумасшедшие вещи, такие как iframes и элементы динамического скрипта, до сих пор не пойду. Я знаю, что нарушаю «ту же политику происхождения», но должен быть какой-то способ заставить эту работу.

Я приму любое дурацкое решение, кроме написания протокола SSL в javascript.

Ответы [ 4 ]

5 голосов
/ 28 мая 2010

Это не будет работать по умолчанию из-за той же политики происхождения , как вы упомянули. Современные браузеры реализуют CORS (Cross-Origin Resource Sharing), который вы можете использовать для решения этой проблемы. Однако это будет работать только в Internet Explorer 8+, Firefox 3.5+, Safari 4+ и Chrome и требует некоторой работы на стороне сервера. Вы можете проверить следующую статью для дальнейшего чтения по этой теме:

Вы также можете использовать JSONP в качестве Дэн Бим предложил в другом ответе . Это требует некоторой дополнительной работы с JavaScript, и вам может понадобиться «дополнить» ответ веб-службы, но это еще один вариант, который работает во всех текущих браузерах.

4 голосов
/ 28 мая 2010

Вы не можете обойти междоменное происхождение с помощью XHR (ну, только в Firefox 3.5 с разрешения пользователя, не очень хорошее решение). Технически, переход с порта 80 (http) на 443 (https) нарушает эту политику (должен быть тот же домен и порт). Это пример самой спецификации сайтов здесь - http://www.w3.org/Security/wiki/Same_Origin_Policy#General_Principles.

Вы смотрели в JSONP (http://en.wikipedia.org/wiki/JSON#JSONP) или CSSHttpRequests (http://nb.io/hacks/csshttprequest)?

)

JSONP - это способ добавить тег <script> на страницу с предварительно определенным глобальным обратным вызовом для разных доменов (так как вы можете поместить <script> s src в любое место в Интернете). Пример:

<script>

    function globalCallback (a) { /* do stuff with a */ }

И затем вы вставляете тег <script> в другой домен, например:

    var jsonp = document.createElement('script');
    json.setAttribute('src','http://path.to/my/script');
    document.body.appendChild(jsonp);

</script>

А в источнике внешнего скрипта вы должны вызвать функцию globalCallback с данными, которые вы хотите передать ей, например:

 globalCallback({"big":{"phat":"object"}});

И вы получите нужные данные после выполнения этого скрипта!

CSSHttpRequests - это скорее хак, поэтому у меня никогда не было необходимости его использовать, хотя не стесняйтесь попробовать, если вам не нравится JSONP: :).

2 голосов
/ 23 июля 2010

Вы сказали, что вам понадобится что-нибудь, кроме того, чтобы протокол SSL был написан на JavaScript ... но я полагаю, вы имели в виду, если бы вам пришлось писать его самостоятельно.

Проект Forge с открытым исходным кодом предоставляет реализацию JavaScript TLS, а также некоторые Flash для обработки междоменных запросов:

http://github.com/digitalbazaar/forge/blob/master/README

Ознакомьтесь с постами в блоге в конце README, чтобы получить более подробное объяснение того, как это работает.

0 голосов
/ 28 мая 2010

Я не думаю, что это возможно. Ранее спросил: Ajax с использованием https на странице http

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...