小编jan*_*agn的帖子

XDomainRequest对IE8和IE9上的XMLHttpRequest

我对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

javascript xmlhttprequest cross-domain xdomainrequest

7
推荐指数
1
解决办法
2091
查看次数