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

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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- Нажмите OK.

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

Ответ 4

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

Ответ 5

Вместо использования метода 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()

Ответ 6

Причина этой ошибки очень проста. Ваш AJAX пытается вызвать через HTTP, тогда как ваш сервер работает по HTTPS, поэтому ваш сервер отказывает в вызове AJAX. Это можно исправить, добавив следующую строку внутри тега head вашего основного HTML файла:

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