Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE8和IE9上的XDomainRequest与XMLHttpRequest_Javascript_Xmlhttprequest_Cross Domain_Xdomainrequest - Fatal编程技术网

Javascript IE8和IE9上的XDomainRequest与XMLHttpRequest

Javascript IE8和IE9上的XDomainRequest与XMLHttpRequest,javascript,xmlhttprequest,cross-domain,xdomainrequest,Javascript,Xmlhttprequest,Cross Domain,Xdomainrequest,我对XMLHttpRequest和XDomainRequest的转世非常困惑,希望得到一些帮助。以下是我的发现: IE8和IE9中的XDomainRequest似乎是某种XMLHttpRequest子类(?) XDomainRequest缺少“withCredentials” XDomainRequest缺少“onLoad”事件,强制您使用state和status IFs-EDIT:这并不完全正确。如果在IE8和IE9中实例化XDomainRequest,则onLoad可用。但是,如果在EI8或

我对XMLHttpRequest和XDomainRequest的转世非常困惑,希望得到一些帮助。以下是我的发现:

  • IE8和IE9中的XDomainRequest似乎是某种XMLHttpRequest子类(?)
  • XDomainRequest缺少“withCredentials”
  • XDomainRequest缺少“onLoad”事件,强制您使用state和status IFs-EDIT:这并不完全正确。如果在IE8和IE9中实例化XDomainRequest,则onLoad可用。但是,如果在EI8或IE9中实例化XMLHttpRequest,则onLoad不可用。我们将在下文中了解这一点的重要性
  • 此外,它以纯文本形式提交数据,而不是以表单形式强制您在后端解析inputstream
  • 即使CORS server“Allow Headers”指令允许客户端读取设置的Cookie,XDomainRequest也不会公开它,从而无法使用Cookie存储的会话ID进行身份验证
  • 最后,如果我没有错的话,它只允许POST和GET http方法,这使得它对RestFull web服务毫无用处
  • 这份清单绝对不完整,正如我所说,它是基于我的发现。然而,这里是混乱的开始。我有一个应用程序,通过Ajax我必须:

    • 通过获取加密密钥以及与其关联的会话id来获取(跨域)
    • 使用此密钥加密我的用户密码(此处没有问题)
    • 使用POST和x-www-form-urlencoded用户名以及加密密码登录到跨域(我在步骤1中获得了密钥)
    现在,由于以上所有原因,我无法使用XDomainRequest执行此操作:

    • 首先是因为XDomainRequest:open(方法,url)只发送纯文本,而我的第三方应用程序需要表单(我可以编写一个过滤器/请求拦截器,但这不是重点)
    • 因为我的会话id与加密密钥一起通过Set-Cookie头(步骤1)到达,在作为头登录时不会发送回跨域,因为XDomainRequest不公开头
    尽管如此,如果在IE8和IE9中,我实例化了一个XMLHttpRequest,而不考虑所描述的所有这些检查,那么一切正常!!!好的,我没有得到onload事件,我也不确定“withcredentials”的故事是什么,但是IE8和IE9在跨域使用XMLHttpRequest时似乎没有问题。但是为什么呢?这些不都是矛盾的吗?我只是想弄清楚这个问题,因为我担心在IE8和IE9中使用XMLHttpRequest可能会在某个时候再次出现并产生影响。我可以问一个明确的例子,当有人可以使用一个而不是另一个?更好的是,IE8和IE9是否有任何更新解决了这个问题

    任何帮助都将不胜感激Yiannis

    首先请注意:

    IE11不推荐XDomainRequest对象,该对象在中不可用 IE11边缘模式

    1) 什么是XDomainRequest?IE为什么有这个对象?几年前,W3C开发了
    XMLHTTPRequest 2
    规范,所有浏览器都在
    XMLHTTPRequest
    1级之上构建2级,微软创建了
    XDomainRequest
    。所以XDomainRequest不是一个子类,这是一个非标准的IE特性

    2) 是的,XDomainRequest缺少“withCredentials”。因为:

    为了防止滥用用户的环境权限(例如Cookie、HTTP凭据、客户端证书等),请求将被删除Cookie和凭据,并将忽略任何身份验证挑战或在HTTP响应中设置Cookie指令。XDomainRequests不会在以前经过身份验证的连接上发送,因为某些Windows身份验证协议(例如NTLM/Kerberos)是基于每个连接而不是基于每个请求的

    (四)

    截至2014年,XDomainRequest似乎没有发送任何内容类型 根本没有头球。我不清楚这是什么时候改变的

    等等等等。。。 我发布这个答案只是为了历史

    不要使用XDomainRequest。这是一个丑陋且有缺陷的非标准功能。

    更多信息请点击此处:

  • 这一点不正确。在IE8/9中发送COR的唯一方法是使用非标准XDomainRequest

    but IE8 and IE9 seems to have no problem using the XMLHttpRequest for cross domain