Междоменное сердцебиение не может анализировать данные jsonp с помощью jquery

#jquery #json #security #same-origin-policy #heartbeat

#jquery #json #Безопасность #политика того же происхождения #сердцебиение

Вопрос:

Я внедряю свой модуль, asp.net проект, в «портале», портал генерирует iframe на мой URL, я знаю, что это дерьмо, но я этого не сделал.
Чтобы избежать завершения сеанса в главном «портале», пока пользователь выполняет итерацию с моим веб-проектом, владелец портала сказал мне запустить сердцебиение с помощью javascript из моего приложения на портал.
Все знают, что сохранять сеанс таким образом небезопасно, но «портал» есть, тогда мне нечего делать.
Реальная проблема в том, что я не могу выполнять междоменные запросы из своего приложения на портал, потому что политика того же источника блокирует его, я нашел решение с использованием jquery, но для этого требуется [прослушиватель сердцебиения] иметь дело с json.
Официальный сайт jsonp здесь.
Кто-нибудь может мне помочь?
вот мой скрипт:

 function startHeartbeat() 
{
    var interval = 9513575;
    window.setInterval(
         function () {
             $.ajax({
                 type: "GET",
                 cache: false,
                 async: true,
                 crossDomain: true,
                 url: "http://www.theportalurl.com",
                 dataType: 'JSONP',
                 complete:function(jqXHR, textStatus){                    
                     alert("Complete");
                 },
                 success:function(json){                    
                     alert("Success");
                 },
                 error:function(jqXHR, textStatus, errorThrown){
                     alert("Error:"   textStatus   ", detail:"   errorThrown);
                 },
            });

         }
     , interval
     );
}
  

после того, как @rook поможет мне, я достигну этого:

 function startHeartbeat(pgn) 
{
    $("body").append("<img id='heartbeat' style='width:1px; height:1px' name='heartbeat' src='http://www." Math.random() ".org'/>");
    var interval = 350000;
    window.setInterval(
         function () {
            var rnd = Math.random();
            var url = "https://www.theportal.com/refreshsession.aspx?pgn=" pgn "amp;rndv=" rnd;
            $("#heartbeat").attr("src", url);
         }
     , interval
     );
}
  

Ответ №1:

То, что вы пытаетесь сделать, является явным нарушением той же политики происхождения для JavaScript. Хорошим решением является то, что владелец портала может установить этот элемент заголовка http для страницы (и только для страницы), которую вы хотите получить с помощью XHR.

Access-Control-Allow-Origin: http://foo.example

источник: управление доступом http

Комментарии:

1. Большое спасибо за ответ, но я не могу изменить портал, не могу изменить код, не могу изменить конфигурацию, может быть, я смогу поместить свое приложение под тот же корень theportalurl.com/myapplicationhere .

2. @newway если он находится в том же домене, у вас не должно возникнуть проблем, другим решением является «междоменный прокси».

3. Большое спасибо. Это не в том же домене, но я попрошу об этом своего администратора, я не могу наложить руки на сервер и не хочу этого тоже;) затем поместить в тот же домен, чтобы стать последней уникальной возможностью.

4. @newway другое дело, если вы не беспокоитесь о получении ответа, вы можете просто написать невидимый тег <img> на страницу, который запустит запрос get. Это обычно используется в эксплойтах XSRF / CSRF.

5. Еще раз спасибо. Я могу настроить таргетинг на какое-либо изображение в домашнем портале. Не удается изменить портал. Вы рассказываете об этом: intelliproject.net/articles/showArticle/index /…