Подтвердить что ты не робот

Запрос перекрестного домена с HTTP на HTTPS прерывается немедленно

Я пытаюсь сделать межсетевые вызовы webservice с HTTP-страницы на службу HTTPS.

Я установил правильные заголовки CORS на сервере (он работает с HTTP-HTTP и HTTPS-HTTPS).

Он работает, если я меняю запросы на JSONp.

Что я вижу в Chrome и Firefox, запрос HTTPS никогда не отправляется, он сразу же прерывается и сервер никогда не видит запрос.

Стоит отметить, что запрос preflight OPTIONS прерывается (и он не доходит до сервера).

Я не могу найти источник, объясняющий, что это действительно невозможно (HTTP to HTTPS) и еще лучше: объясняет почему. Я могу понять, что HTTPS для HTTP небезопасен, но вокруг все должно быть хорошо? Мне кажется глупым, потому что JSONp работает (но это грязно).

Примечания

У меня также есть withCredentials, установленный на true, и я отправляю некоторые пользовательские заголовки и пользовательские Content-Type: application/json

Я использую обычный XMLHTTPRequest с резервными ошибками для JSONp для IE <= 9

4b9b3361

Ответ 1

Хорошо, я понял это. Сертификат, который я использую для домена HTTPS, является самоподписанным и непроверенным. Добавление его в список доверенных сторонних властей исправило его для меня.

Вы можете установить сертификат в Windows 7 через IE. Это сработало для меня: http://productforums.google.com/forum/#!topic/chrome/bds-Ao9LigA%5B1-25%5D сообщение от zacharysyoung 2/11/09 Убедитесь, что вы запустили IE (9) в качестве администратора, или установка завершится неудачно, хотя он говорит, что он правильно установил ее.

  • Откройте Internet Explorer (IE) и перейдите на сайт, на котором размещен самозаверяющий сертификат.
  • IE должен отображать предупреждение о том, что "существует проблема с этим сертификатом безопасности веб-сайта".
  • Нажмите ссылку "Продолжить на этот сайт (не рекомендуется)".
  • Как только страница загрузится, посмотрите справа от адресной строки. Красная/розовая кнопка с надписью "Ошибка сертификата" должна быть видимой. Нажмите эта кнопка.
  • Появится всплывающее окно под названием "Неверный сертификат". Нажмите ссылку "Просмотреть сертификаты" внизу всплывающего окна.
  • Появится другое всплывающее окно под названием "Сертификат". Нажмите кнопку "Установить сертификат...".
  • Будет запущен "Мастер импорта сертификатов". Нажмите кнопку "Далее" .
  • ** Для XP: a. Оставьте флажок "Автоматически выбирать сертификат..." и нажмите кнопку "Далее" . ** Для Vista: a. Выберите опцию "Разместить все сертификаты в следующем магазине" и нажмите кнопку "Обзор". б. Нажмите "Показать магазины физика", флажок. с. Разверните "Корневую сертификацию сторонних поставщиков" Папка "Власти" и выберите "Локальный компьютер". Нажмите "ОК" кнопка. д. Нажмите кнопку "Далее" .
  • Это должно отобразить диалоговое окно "Завершение мастера импорта сертификатов". Нажмите кнопку "Готово".
  • Появится всплывающее окно "Предупреждение о безопасности". Предупреждение информирует вас о том, что подлинность сертификата не может быть проверена. Вы должен знать, откуда приходит сертификат. Если вы это сделаете, нажмите Кнопка "Да" для установки сертификата.
  • Заключительное всплывающее сообщение, информирующее вас о том, что "Импорт был успешным" будет отображаться. Нажмите кнопку "ОК".
  • Перезагрузите/откройте Chrome и перейдите к соответствующему сайту. Не следует приветствовать страницу с предупреждением о безопасности.

Кроме того, я думаю, что я обнаружил ошибку в Chrome. Видеть: https://code.google.com/p/chromium/issues/detail?id=141839

Ответ 2

Возможно, было бы проще настроить что-то вроде easyXDM. Это довольно быстро, чтобы идти и будет делать всю обратную совместимость для вас (вплоть до IE6). Это может быть не самодельное решение, которое вы ищете, но если вы хотите, чтобы кросс-домен (где у вас есть доступ к обеим сторонам) в спешке, он подходит к счету.

Вы всегда можете написать свой собственный интерфейс iframe (postMessage), но зачем заново изобретать колесо (и не забудьте установить свой document.domain, если вы используете разные поддомены).