it-swarm.com.ru

"Смешанный контент заблокирован" при запуске HTTP AJAX работа на странице HTTPS

У меня есть форма, которую я отправляю (через GET, как это требуется) в crm (ViciDial). Однако я могу успешно отправить форму, если я сделаю так, что файл обработки в crm просто отобразит текст успеха, и все.

Вместо этого текста я хочу отобразить страницу благодарности на моем веб-сайте, поэтому я решил использовать AJAX для отправки формы и перенаправления ее на нужную мне страницу, однако я получаю эту ошибку на своем браузер:

Смешанный контент: страница по адресу ' https://page.com ' была загружена через HTTPS, но запросил небезопасную конечную точку XMLHttpRequest ' http://XX.XXX.XX.XXX/vicidial/non_agent_api.php?queries=query=data ' . Этот запрос был заблокирован; содержание должно быть подано через HTTPS.

Это мой AJAX скрипт:

    <script>
    SubmitFormClickToCall = function(){

        jQuery.ajax({
            url: "http://XX.XXX.XX.XX/vicidial/non_agent_api.php",
            data : jQuery("#form-click-to-call").serialize(),
            type : "GET",
            processData: false,
            contentType: false,
            success: function(data){
                window.location.href = "https://www.example.com/thank-you";
            }
        });
    }
    </script>

Просто установить https в URL не получится, есть ли способ, которым я могу отправить данные через GET и перенаправить пользователя на мою страницу спасибо?

============================

Проблема здесь была в смешанном контенте, это значит, что я загрузил страницу через HTTPS и пытался использовать AJAX API, который был в HTTP. Но браузер не позволит нам просто сделать это. 

Так что, если вы не можете установить API для HTTPS (это был мой случай), мы все равно можем подойти к этому по-другому.

Главная проблема была не в смешанном контенте, а в том, что я хотел отправить данные в API и перенаправить пользователей на необычную страницу благодарности. Вместо того, чтобы использовать AJAX, я создал php-файл, который получает данные, отправляет их с помощью curl в API (поскольку это делается на стороне сервера, здесь нет проблем со смешанным контентом) и перенаправляет моего счастливого пользователя на необычную страницу благодарности.

51
StormRage

Если вы загрузите страницу в своем браузере с использованием HTTPS, браузер откажется загружать любые ресурсы через HTTP. Как вы уже убедились, изменение URL-адреса API, чтобы вместо HTTPS иметь HTTPS, обычно решает эту проблему . Однако ваш API не должен разрешать HTTPS-соединения. Из-за этого вы должны либо принудительно установить HTTP на главной странице, либо запросить разрешение HTTPS-соединений. 

Обратите внимание: запрос будет работать, если вы перейдете по URL-адресу API, а не попытаетесь загрузить его с помощью AJAX. Это связано с тем, что браузер не загружает ресурс из защищенной страницы, а загружает небезопасную страницу и принимает это. Однако, чтобы он был доступен через AJAX, протоколы должны совпадать.

56
Mikel Bitson

Я решил эту проблему, добавив следующий код на страницу HTML, поскольку мы используем сторонний API, который не контролируется нами.

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> 

Надеюсь, что это поможет, и для записи, а также.

47
Sky

Если вы просто посещаете веб-страницу, которой доверяете, и хотите быстро двигаться вперед, просто:

1- Нажмите значок щита в правой части адресной строки.

 Allow mixed content in Google Chrome

2- Во всплывающем окне нажмите «Все равно загрузить» или «Загрузить небезопасный скрипт» (в зависимости от версии Chrome).


Если вы хотите установить в браузере Chrome ВСЕГДА (на всех веб-страницах), разрешите смешанный контент:

1- В открытом браузере Chrome нажмите Ctrl + Shift + Q на клавиатуре, чтобы принудительно закрыть Chrome. Хром должен быть полностью закрыт до следующих шагов.

2- Щелкните правой кнопкой мыши значок Google Chrome на рабочем столе (или ссылку «Пуск») . Выберите «Свойства».

3- В конце существующей информации в поле «Цель» добавьте: «--allow-running-insecure-content» (перед первой чертой есть пробел.)

4- Нажмите ОК.

5- Откройте Chrome и попробуйте запустить контент, заблокированный ранее. Это должно работать сейчас.

10
Juanma Menendez

Если ваш код API работает на node.js server, то вам нужно сосредоточить внимание там, а не на Apache или NGINX. Микель прав, изменение URL-адреса API на HTTPS - это ответ, но если ваш API вызывает сервер node.js, лучше настроить HTTPS! И, конечно, сервер node.js может находиться на любом неиспользуемом порту, это не обязательно должен быть порт 443.

0
mcmacerson

Вместо использования метода Ajax Post вы можете использовать динамическую форму вместе с элементом . Он будет работать, даже если страница загружена в SSL и отправленный источник не является SSL.

Вам нужно установить значение value элемента формы.

На самом деле новая динамическая форма будет открываться как режим без SSL на отдельной вкладке браузера, когда целевой атрибут установил «_blank»

var f = document.createElement('form');
f.action='http://XX.XXX.XX.XX/vicidial/non_agent_api.php';
f.method='POST';
//f.target='_blank';
//f.enctype="multipart/form-data"

var k=document.createElement('input');
k.type='hidden';k.name='CustomerID';
k.value='7299';
f.appendChild(k);



//var z=document.getElementById("FileNameId")
//z.setAttribute("name", "IDProof");
//z.setAttribute("id", "IDProof");
//f.appendChild(z);

document.body.appendChild(f);
f.submit()
0
Proneet Ray