«Смешанный контент заблокирован» при выполнении операции 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 (так как это делается на стороне сервера, нет проблемы со смешанным контентом) и перенаправляет моего счастливого пользователя на страницу с благодарностью.

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

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

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

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

Фактически новая динамическая форма будет открыта как не-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() 

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