Смешанный контент jQuery ajax HTTPS-запрос был заблокирован на Laravel

Я думаю, что этот вопрос будет легким для кого-то, и для меня это будет сложная ситуация.

У меня есть сайт Laravel 5.3, и на разных страницах есть запросы ajax. Потому что я использую csrf_field()особенность, они работают нормально.

Но есть одна страница, где ajax выдает эту ошибку:

Mixed Content: The page at 'https://example.com/fb/reports' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://example.com/fb/json?levelType=&id=&aggLevel=ad&start=&end='. This request has been blocked; the content must be served over HTTPS.

Мой JavaScript выглядит так:

    var relUrl = '/fb/json/';
    var payload = {
        levelType: levelType,
        id: id,
        aggLevel: aggLevel,
        start: start,
        end: end
    };
    console.log(relUrl);
    return $.ajax({
        type: 'GET',
        dataType: 'json',
        data: payload,
        url: relUrl,
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }            
    });

Я прочиталтонны статей об этой ошибке. Я испробовал множество предлагаемых решений, включая изменение относительного URL-адреса на полный URL-адрес https или запуск его с двумя косыми чертами.

Я даже пытался изменить способ работы моих маршрутов Laravel и теперь использую только параметры строки запроса.

Я изучил все статьи ниже (и больше).

Кроме того, поскольку этот один ajax-запрос находится в защищенной паролем части сайта (аработающие ajax-запросы находятся в публичной / открытой части сайта), я подумал, что это может быть связано с проблемой. Но тогда я использовал SSHвойти на рабочий сервер иvim временно удалить строку, которая требовала какой-либо аутентификации, и ошибка https все еще происходит.

Какие шаги я могу предпринять для дальнейшей отладки? Какие журналы я могу "хвостить" на своем сервере Cloudways?

Есть ли что-то, с чем Cloudflare может мешать (что я сомневаюсь, так как другие запросы ajax работают, все по https)?

Спасибо!

2 ответа

Решение

Резюме: мне нужно было заменить var relUrl = '/fb/json/'; с var relUrl = '/fb/json'; (убрать косую черту), потому что это то, что мой Laravel web.php файл маршрутов ожидается.


В консоли Chrome я заметил, что https Запрос XHR был "отменен" и заменен на http запрос.

Итак, я использовал ssh войти на удаленный производственный сервер и vim временно отключить требование аутентификации.

Затем в консоли Chrome я определил и запустил новую команду ajax, используя абсолютный URL-адрес https с параметрами строки запроса в конце. Это сработало (без ошибки смешанного контента). Затем я попробовал относительный URL-адрес, и это тоже сработало.

Работал даже относительный URL без параметров полезной нагрузки, строки запроса или конечной косой черты.

Затем я снова добавил косую черту, и она не сработала.

Я все еще хотел бы, чтобы был более легкий способ отследить или отладить пути перенаправления или что-то происходящее. Я все еще чувствую, что наткнулся на ответ неуклюже (после многих часов) вместо того, чтобы знать, как надежно разобрать эту проблему.

При переходе с HTTP на HTTPS может возникнуть проблема со смешанным содержимым — содержимое должно обслуживаться как HTTPS.

Итак, сначала измените APP_URLв .envфайл, если мы используем помощник активов, это не должно вызывать проблем с URL-адресом.

      APP_URL=https://url.net

Наконец, добавьте следующее в начало **api.php**или же **web.php**:

      if (App::environment('production')) {
    URL::forceScheme('https');
}
Другие вопросы по тегам