Ajax вызов локального хоста с сайта, загруженного через HTTPS, не удается в Chrome

-------------------- ОБНОВЛЕНИЕ 2 ------------------------

Теперь я вижу, что то, что я пытаюсь достичь, невозможно с помощью Chrome. Но меня все еще интересует, почему в Chrome политика более строгая, чем, например, в Firefox? Или, возможно, что firefox на самом деле не выполняет вызов, но с точки зрения javascript он считает, что вызов не состоялся, а не все вместе заблокировано?

---------------- ОБНОВЛЕНИЕ 1 ----------------------

Похоже, проблема действительно связана с вызовом http с https-сайта, эта ошибка выдается в консоли chrome:

Смешанный контент: страница по адресу https://login.mysite.com/mp/quickstore1 была загружена через HTTPS, но затребована небезопасная конечная точка XMLHttpRequest ' http://localhost/biztv_local/video/video_check.php?video=253d01cb490c1cbaaa2b7dc031eaa9f5.mov&fullscreen=on'. Этот запрос был заблокирован; содержание должно быть подано через HTTPS.

Тогда возникает вопрос, почему Firefox это позволяет, и есть ли способ сделать так, чтобы Chrome позволял это делать. Это действительно работало хорошо только несколько месяцев назад.


Оригинальный вопрос:

У меня есть некоторый jQuery, который делает вызов ajax на http (сайт, который звонит, загружается через https).

Более того, вызов с моего https-сайта происходит с помощью скрипта на локальном хосте на клиентском компьютере, но файл начинается с

<?php header('Access-Control-Allow-Origin: *'); ?>

Так что все в порядке. Вы можете сказать, что это специфическая настройка, но клиент на самом деле является медиаплеером.

Раньше он всегда работал нормально и все еще отлично работает в Firefox, но примерно два месяца назад он не работает в Chrome.

Были ли изменения в политиках в chrome в отношении этого типа вызовов? Или есть ошибка в моем коде ниже, что Firefox удается разобрать, а Chrome нет?

Ошибка возникает, только когда файл НЕ присутствует на локальном хосте (то есть, если обычный веб-пользователь заходит на этот сайт со своим собственным браузером, естественно, у него не будет файла на локальном хосте, у большинства даже не будет локального хоста) так что одна теория может заключаться в том, что, поскольку файл отсутствует, Access-Control-Allow-Origin: * никогда не встречается, и поэтому вызов полностью считается небезопасным или не разрешенным chrome, поэтому он никогда не завершается?

Если да, есть ли обработчик событий, который я могу прикрепить к своему методу jQuery.ajax, чтобы вместо этого получить этот результат? На данный момент complete никогда не запускается, если файл на localhost отсутствует.

before : function( self ) {

    var myself = this;

    var data = self.slides[self.nextSlide-1].data;

    var html = myself.getHtml(data);
    $('#module_'+self.moduleId+'-slide_'+self.slideToCreate).html(html);


    //This is the fullscreen-always version of the video template
    var fullscreen = 'on';

    //console.log('runnin beforeSlide method for a video template');
    var videoCallStringBase = "http://localhost/biztv_local/video/video_check.php?"; //to call mediaplayers localhost
    var videoContent='video='+data['filename_machine']+'&fullscreen='+fullscreen;
    var videoCallString = videoCallStringBase + videoContent;

    //TODO: works when file video_check.php is found, but if it isn't, it will wait for a video to play. It should skip then as well...
    //UPDATE: Isn't this fixed already? Debug once env. is set up

    console.log('checking for '+videoCallString);

    jQuery.ajax({
        url:    videoCallString,
        success: function(result) {
            //...if it isn't, we can't playback the video so skip next slide
            if (result != 1) {
                console.log('found no video_check on localhost so skip slide '+self.nextSlide);
                self.skip();                
            }
            else {
                //success, proceed as normal
                self.beforeComplete();
            }
        }, 
        complete: function(xhr, data) {
            if (xhr.status != 200) {
                //we could not find the check-video file on localhost so skip next slide
                console.log('found no video_check on localhost so skip slide '+self.nextSlide);
                self.skip();                        
            }
            else {
                //success, proceed as normal
                self.beforeComplete();
            }
        }, //above would cause a double-slide-skip, I think. Removed for now, that should be trapped by the fail clause anyways.
        async: true
    });

0 ответов

Другие вопросы по тегам