同源问题(文件上传)

时间:2011-04-26 11:48:47

标签: javascript xmlhttprequest same-origin-policy

客户端位于域foo.com上,需要上传(发送POST XMLHttpRequest)到upload.foo.com

由于原产地政策相同,因此受到限制 但是,我设法提出的工作是,在iframe打开foo.com上动态创建upload.foo.com并附加执行来自upload.foo.com的POST请求的JavaScript代码像这样: iframe.onLoad [..]

(a=(b=doc)
.createElement('script'))
.src='http://foo.com/upload.php?'+Math.random(),
b.body.appendChild(a);
void(0);

现在,对我而言,这似乎是多余的:如果后者可能,我的逻辑告诉我,前者也应该是可能的。是吗?

- 更新

我刚刚注意到子域中有文件包含:

<?xml version="1.0" ?> 
<cross-domain-policy>
<allow-access-from domain="*" />
<allow-access-from domain="*.foo.com" secure="false" /> 
</cross-domain-policy>

我可以以某种方式使用它吗?

2 个答案:

答案 0 :(得分:1)

XMLHttpRequest对document.domain不敏感,因为出于安全原因,该对象需要相互选择,并且XHR无法知道目标可能希望将document.domain值设置为什么。为了使SiteA与SiteB上的站点的DOM进行交互,两个站点必须共享一个公共的私有域后缀,并且两者都必须通过将document.domain设置为它们的公共后缀来选择加入通信。

您的跨域策略文件实际上没有多大意义(因为它选择了所有内容,然后是所有内容的子集),但它用于Flash,而不是XHR(使用CORS)。

答案 1 :(得分:0)

我认为不可能简化这一点,但如果它看起来不那么优雅,那么有更简单的方法来使用跨源JS。

实际上,如果您尝试使用jsonp发送请求,这几乎就是jQuery所做的。 Wikipedia for JSONP
(以及绕过同源限制的其他几种方法)

我不知道这是不是你要问的问题,但是以可维护性的名义,我建议你使用jQuery approach

您需要设置 dataType:'jsonp',并且您已完成设置。 您可以选择设置参数“callback =?”(查看文档)。

相关问题