XDomainRequest对IE8和IE9上的XMLHttpRequest

jan*_*agn 7 javascript xmlhttprequest cross-domain xdomainrequest

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

  1. IE8和IE9中的XDomainRequest似乎是某种XMLHttpRequest子类(?)
  2. XDomainRequest缺少"withCredentials"
  3. XDomainRequest缺少"onLoad"事件,强制您使用状态和状态IF - 编辑:这不完全正确.如果在IE8和IE9中实例化XDomainRequest,则可以使用onLoad.如果您在EI8或IE9中实例化XMLHttpRequest,则onLoad不可用.我们将在下面看到为什么这很重要.
  4. 此外,它以普通/文本形式提交数据,而不是强制您在后端解析输入流的形式.
  5. 即使CORS服务器"Allow-Headers"指令允许客户端读取Set-Cookie,XDomainRequest也不会公开它,因此无法使用cookie存储的会话iD进行身份验证.
  6. 最后,如果我没有错,它只允许POST和GET http方法使它对RestFull Web服务无用.

这个清单并不完整,正如我所说,这是基于我的发现.然而,这是混乱开始的地方.我有一个应用程序,通过Ajax我必须:

  • 通过GET获取(跨域)加密密钥以及与之关联的会话ID.
  • 使用此密钥加密我的用户密码(这里没问题)
  • 使用POST和x-www-form-urlencoded用户名和加密密码登录跨域(我在步骤1获得密钥).

由于上述所有原因,我无法使用XDomainRequest执行此操作:

  • 首先是因为XDomainRequest:open(方法,url)只发送纯文本而我的第三方应用程序正在期待表单(我可以写一个过滤器/请求拦截器,但这不是重点).
  • 因为通过Set-Cookie标头(步骤1)使用加密密钥到达的会话ID在作为标头登录时从不发送回跨域,因为XDomainRequest不公开标头.

然而,如果在IE8和IE9中我实例化XMLHttpRequest而忽略了这里描述的所有这些检查,那么一切正常!好吧我没有得到onload事件,我不确定"withcredentials"的故事是什么,但IE8和IE9似乎没有问题使用XMLHttpRequest进行跨域.但为什么?这些都不矛盾吗?我只是想弄清楚这个问题,因为我担心在IE8和IE9中使用XMLHttpRequest可能会在某些时候回来咬人.当有人可以使用一个而不是另一个时,我可以要求一个明确的例子吗?更好的是,是否有任何更新IE8和IE9解决了这个问题?

任何帮助将非常感谢Yiannis

Pin*_*nal 2

首先注意这一点:

\n\n
\n

IE11 弃用了 XDomainRequest 对象,并且它在 IE11 Edge 模式下不可用。

\n
\n\n

1) 什么是 XDomainRequest 以及为什么 IE 有这个对象?几年前,XMLHTTPRequest 2W3C 正在制定规范,所有浏览器构建级别 2 高于XMLHTTPRequestMicrosoft 创建的XDomainRequest. 所以XDomainRequest不是一个子类,这是一个非标准的IE功能

\n\n

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

\n\n
\n

为了防止滥用用户\xe2\x80\x99s环境权限(例如cookie、HTTP凭据、客户端证书等),请求将被剥离cookie和凭据,并将忽略任何身份验证质询或Set-Cookie指令HTTP 响应。XDomainRequests 不会在先前经过身份验证的连接上发送,因为某些 Windows 身份验证协议(例如 NTLM/Kerberos)是基于每个连接的,而不是基于每个请求的。

\n
\n\n

4)

\n\n
\n

截至 2014 年,XDomainRequest 似乎根本不发送任何 Content-Type\n 标头。我不清楚这是什么时候改变的。

\n
\n\n

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

\n\n

不要使用 XDomainRequest。这是丑陋且错误的非标准功能。

\n\n

更多信息请点击这里:

\n\n
    \n
  1. http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
  2. \n
  3. http://www.html5rocks.com/en/tutorials/cors/
  4. \n
  5. http://msdn.microsoft.com/en-us/library/ie/cc288060%28v=vs.85%29.aspx
  6. \n
  7. https://developer.mozilla.org/en-US/docs/Web/API/XDomainRequest
  8. \n
\n