如何将JavaScript自动POST的状态代码获取到另一个域

时间:2012-08-24 12:31:41

标签: javascript ajax http xss saml

我们正在构建一个SAML解决方案,该解决方案在一个阶段涉及我们提供预先填充了各种参数的html表单,设置为POST到独立于我们的Web服务上的端点。然后,此表单将通过JavaScript自动提交。 (即这是SAML POST绑定)

对于调试,如果我们能够发现这个自动POST是否成功,那将是非常有用的。有没有人对我们如何做到这一点有任何想法?只需能够获取HTTP状态代码,或者能够确定请求是否超时,就会非常有用。

当前进展:

据我所知,没有办法直接查看表单提交的实际结果,我也不认为你可以从onunload获取下一个请求的状态事件。

我们已准备好对其进行重组,而不是使用AJAX进行POST,但我认为我们无法对其他端点的域进行此操作。我还想知道我们是否可以在一个框架中加载另一个页面并以某种方式得到一些信息,但我知道它也有自己的一组跨域限制。

最后,我们可以先尝试使用POST服务器端进行分析,但很可能我们所服务的服务器很可能只在客户端本地可用的网络上进行,因此&#39 ; s可能只是不可行,除了重播等各种各样的问题。

任何想法或解决方案都非常有用!

2 个答案:

答案 0 :(得分:0)

以下是AJAX请求的基本示例:

var xmlhttp;
if (window.XMLHttpRequest)
    xmlhttp=new XMLHttpRequest();
else
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

注意xmlhttp.status == 200行。您应该能够检查此变量以查看从AJAX调用返回的状态。所以你可以这样做:

var xmlhttp;
if (window.XMLHttpRequest)
    xmlhttp=new XMLHttpRequest();
else
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

xmlhttp.onreadystatechange=function()
{
    console.log("STATUS = "+ xmlhttp.status);
}
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

这就是你要找的东西吗?

答案 1 :(得分:0)

对于测试,浏览器的内置调试如何? Chrome可让您查看所有网络请求,包括标题(described here),Firebug也有类似内容。

如果您正在谈论的不仅仅是在测试过程中知道结果,而是从用户那里获得POST成功状态,那么我认为跨域限制太强了,除非:

  • 第三方服务提供了一些您可以使用JSONP
  • 访问的“可行的”URL
  • 第三方服务配置为允许使用CORS的跨站点AJAX(MDN docs