Смешанный контент 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)?
Спасибо!
- jQuery AJAX - запрос к HTTPS, обслуживаемому по HTTP с Laravel и Select2.
- Этот запрос был заблокирован; содержание должно быть подано через HTTPS
- Проблема со смешанным содержимым - небезопасная конечная точка XMLHttpRequest
- Ответ XHR заблокирован Chrome из-за проблемы со смешанным содержимым (http / https)
- Принудительный вызов AJAX для HTTPS со страницы HTTPS
- MixedContent, когда я загружаю страницу https через ajax, но браузер все еще думает, что это http
- JQuery AJAX не будет делать HTTPS-запросы
- Параметр URL Ajax Laravel 5.1 - это URL
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');
}