首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XMLhttprequest得到'404 not found‘,但invoke-webrequest运行正常

XMLhttprequest得到'404 not found‘,但invoke-webrequest运行正常
EN

Stack Overflow用户
提问于 2019-05-01 00:47:30
回答 1查看 151关注 0票数 0

我正在尝试从javascript代码运行Citrix应用程序。我有一个示例可以很好地使用powershell,只需显示first call:

代码语言:javascript
复制
#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未找到‘。Javascript代码也很简单:

代码语言: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调用的:

代码语言:javascript
复制
<!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错误,而同样的URL却工作得很好。

有什么想法吗?

EN

Stack Overflow用户

发布于 2019-05-01 22:08:25

正如前面指出的那样,行为是因为浏览器。它需要来自服务器的有效CORS标头,因此需要使用--disable-web-security启动Chrome以绕过并测试。另外,我要指出的是,我浪费了时间,因为服务器错误是“404未找到”,而不是禁止或其他什么……

我还了解到powershell cmdlet invoke-webrequest完全不受CORS限制。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55925463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档