Authentication XMLHttpRequest的用户身份验证在IE中有效,而不是在Chrome中?

Authentication XMLHttpRequest的用户身份验证在IE中有效,而不是在Chrome中?,authentication,twitter,webkit,xmlhttprequest,google-chrome,Authentication,Twitter,Webkit,Xmlhttprequest,Google Chrome,以下功能适用于IE,但不适用于Chrome: function doStuff() { var request = new XMLHttpRequest(); request.open("POST", "http://twitter.com/statuses/update.json", true, "USERNAME-HERE", "PASSWORD-HERE"); request.send("status=STATUS UPDATE HERE"); } Chrome生成以下请求。

以下功能适用于IE,但不适用于Chrome:

function doStuff() {
  var request = new XMLHttpRequest();
  request.open("POST", "http://twitter.com/statuses/update.json", true, "USERNAME-HERE", "PASSWORD-HERE");
  request.send("status=STATUS UPDATE HERE");
}
Chrome生成以下请求。注意:缺少授权标头:

OPTIONS /statuses/update.json HTTP/1.1 Host: twitter.com Connection: keep-alive User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.78 Safari/532.5 Access-Control-Request-Method: POST Origin: file:// Access-Control-Request-Headers: Content-Type Accept: */* Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 选项/状态/update.json HTTP/1.1 主持人:twitter.com 连接:保持活力 用户代理:Mozilla/5.0(Windows;U;Windows NT 6.1;en-US)AppleWebKit/532.5(KHTML,如Gecko)Chrome/4.0.249.78 Safari/532.5 访问控制请求方法:POST 来源:文件:// 访问控制请求头:内容类型 接受:*/* 接受编码:gzip、deflate、sdch 接受语言:en-US,en;q=0.8 接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3 我得到以下响应(http 401):

HTTP/1.1 401未经授权 日期:2010年2月3日星期三00:39:33 GMT 服务员:你好 状态:401未经授权 WWW-Authenticate:Basic-realm=“Twitter-API” X运行时间:0.00107 内容类型:application/json;字符集=utf-8 缓存控制:无缓存,最大使用年限=300 设置Cookie:_twitter_sess=bah7bzohawqijtuxmtc2nzk4n2u0yzmzzmu0ztqynzi4njqyyyji3ode2igpm%250AbGFzaElDOidBY3Rpb25Db250cm9sbGVyOjpGbGFzaDo6Rmxhc2hIYXNoewAG%250AOgpAdXNlZHsA--bb61324c3ba12c3cd1794b3895a906a69c154edd;域名=.twitter.com;路径=/ 过期时间:2010年2月3日星期三00:44:33 GMT 改变:接受编码 内容长度:73 连接:关闭 {“请求”:“/statuses/update.json”,“错误”:“无法对您进行身份验证”。} 那么,我应该如何向XHR传递用户名和密码呢?Webkit/Safari文档说明open方法应该使用这些参数,因此我不确定它失败的原因。

您是否尝试过:

request.setRequestHeader('Authorization', 'yourvalue');

从外观上看,您正在尝试执行一个X域XMLHTTPRequest,这就是Chrome发送选项飞行前请求的原因。因为Twitter服务器没有响应表示X域访问正常的选项请求,所以这里出现了故障


您的代码只能在本地计算机区域的IE中工作,或者如果您关闭x域检查(非常危险)

解决方案是我需要添加的

request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

我这样做的方式是。。。特别的。。。因此,这可能对未来的其他人没有多大用处。但一旦我添加了这个webkit,就开始添加授权。

这对他并没有什么帮助。请注意,Chrome正在发送一个选项请求,但他仍然需要设置授权标头。您的答案也是正确的。添加授权没有帮助。授权标头将由Open()调用的最后两个参数自动发送。如果Open()调用不是x-domain.laid request.setRequestHeader()对您来说毕竟很有用。您是如何绕过跨域调用的?或者twitter是否正确响应选项?跨域对我来说不是问题。。。因为我所做的很特别。
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");