XMLhttprequest получает «404 not found», но invoke-webrequest работает нормально - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь запустить приложение Citrix из кода JavaScript.У меня есть пример, который отлично работает с powershell, просто показывая первый вызов:

#Gets required tokens
$headers = @{
"Accept"='application/xml, text/xml, */*; q=0.01';
"Content-Length"="0";
"X-Requested-With"="XMLHttpRequest";
"X-Citrix-IsUsingHTTPS"="Yes";
"Referer"=$sfurl;
}

Invoke-WebRequest -Uri ($sfurl + "Home/Configuration") -Method POST -Headers $headers -WebSession $sfsession|Out-Null

$csrf = $sfsession.cookies.GetCookies($sfurl)|where{$_.name -like "CsrfToken"}
$cookiedomain = $csrf.Domain
write-host $csrf.Domain

, этот фрагмент кода работает нормально, и мы можем увидеть значение, предоставленное сервером Citrix, но если я переведу его на javascriptЯ получаю только ошибку «404 Not Found».Кусок кода Javascript также прост:

function starticaurl (authurl, whatapp) {
    var csrf = getCookie("CsrfToken");
    var xhr = new XMLHttpRequest();

    xhr.open("POST", (authurl + "Home/Configuration"), true);

    xhr.setRequestHeader("Accept", "application/xml, text/xml, */*; q=0.01");
    //xhr.setRequestHeader("Content-Length","0");
    xhr.setRequestHeader("X-Citrix-IsUsingHTTPS","Yes");
    //xhr.setRequestHeader("Referer",authurl);
    xhr.setRequestHeader('Csrf-Token',csrf);
    xhr.setRequestHeader("Access-Control-Allow-Origin","*");

    xhr.onreadystatechange = function () {
        // do something to response
        console.log(this.responseText);
    };

    xhr.send();

    console.log("Got: " + csrf);

csrf всегда 'null'.Эта функция вызывается из простого html:

<!DOCTYPE html>
<html>    
<head>    
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>     
</head> 

<body>    
    <h1>ICA Launcher</h1>
    <script src="createica.js"></script>

    <button onclick="starticaurl('https://citrix.mycompany.com/Citrix/TestWeb/', 'Notepad')">Launch App</button>
</body>    
</html>

Я не понимаю, почему браузер всегда возвращает эту ошибку 404, когда с powerhell один и тот же URL работает нормально.

Есть идеи?

1 Ответ

0 голосов
/ 01 мая 2019

Как указано выше, поведение связано с тем, что браузер.Для этого требуются действительные заголовки CORS с сервера, поэтому для запуска и тестирования необходимо запустить Chrome с --disable-web-security.Также стоит отметить, что я потратил время впустую, потому что ошибка сервера «404 Не найден» вместо запрещенной или что-то еще ...

Я также понимаю, что командлет powershell invoke-webrequest вообще не подпадает под ограничения CORS.

...