Xhr上传对跨域请求的支持

时间:2011-11-08 21:27:52

标签: upload cross-domain xmlhttprequest

我有一个上传火灾到Amazon S3服务器的代理。此代理使用NodeJS制作,我的网页托管在Tomcat服务器上。因此,要进行Xhr上传,我必须使用Nginx来解决跨域问题,因为两台服务器都在同一台机器上。

但是使用Nginx有很多问题,所以我的老板问我是否可以使用跨域策略做同样的事情。我已经做到了,但这是我无法做到的一些事情。这是我的代码:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(e) {};
xhr.open('POST', self.basePath + '/upload' + file.name, true, null, null, null, true,       true);
xhr.setRequestHeader("Accept", "application/json, text/javascript, */*; q=0.01");
xhr.setRequestHeader("Connection", "close");
xhr.sendAsBinary(file.getAsBinary());

这适用于跨域请求到达服务器并返回响应,但是当我尝试设置这样的进度事件时:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(e) {};
xhr.upload.onprogress = function(){console.info('on progress');};
xhr.open('POST', self.basePath + '/upload' + file.name, true, null, null, null, true,       true);
xhr.setRequestHeader("Accept", "application/json, text/javascript, */*; q=0.01");
xhr.setRequestHeader("Connection", "close");
xhr.sendAsBinary(file.getAsBinary());

不会触发跨域请求(请求使用“OPTIONS”方法而不是POST,它永远不会到达服务器)。但是,正如您可能认为的那样,我需要将progress事件显示给用户。有谁知道发生了什么?

Ps:上面的所有代码都完美地适用于“同一域”请求。 Ps2:我尝试过xhr.onprogress但它永远不会被解雇(在交叉或相同的域请求上) Ps3:我​​尝试过FF4 +和Chrome 12 +

非常感谢。 蒂亚戈

2 个答案:

答案 0 :(得分:1)

xhr.upload.addEventListener("progress", yourUpdateProgressFunction, false);

答案 1 :(得分:1)

我之前遇到过类似的问题。

解决方案:添加

<AllowedHeader>*</AllowedHeader>
的CORS配置中