Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome阻止iframe请求作为跨来源请求,即使来源相同_Javascript_Jquery_Ajax_Rest - Fatal编程技术网

Javascript Chrome阻止iframe请求作为跨来源请求,即使来源相同

Javascript Chrome阻止iframe请求作为跨来源请求,即使来源相同,javascript,jquery,ajax,rest,Javascript,Jquery,Ajax,Rest,这件事把我难住了 我有一个web应用程序,它有一个文件上传/下载区域。文件通过临时iFrame元素在后台下载。这是一个单页AJAX应用程序,UI是用Javascript、jQuery编写的,并使用jQuery.FileDownloader.js来管理iFrame。应用程序通过HTTPS运行,站点和下载URL位于同一个域上。后端是一个RESTful应用程序。这几个月来效果很好。直到今天 突然,当试图在Chrome中下载文件时,浏览器报告了一个错误“阻止了一个具有原点的帧访问交叉原点帧” 问题是主站

这件事把我难住了

我有一个web应用程序,它有一个文件上传/下载区域。文件通过临时iFrame元素在后台下载。这是一个单页AJAX应用程序,UI是用Javascript、jQuery编写的,并使用jQuery.FileDownloader.js来管理iFrame。应用程序通过HTTPS运行,站点和下载URL位于同一个域上。后端是一个RESTful应用程序。这几个月来效果很好。直到今天

突然,当试图在Chrome中下载文件时,浏览器报告了一个错误“阻止了一个具有原点的帧访问交叉原点帧”

问题是主站点和iframe的起源是完全相同的域。我已确保域与协议相同。Chrome是唯一出现交叉原点错误的浏览器。IE、Firefox、Opera、Safari。。。一切按预期进行。它只在Chrome中出现,并且只在今天出现。更糟糕的是,没有对浏览器进行任何更新。这确实是自发的。我还排除了插件的原因,在匿名模式下运行,我的设置不允许任何插件运行,并且禁用了我的防病毒软件。这个问题在其他计算机上,在其他位置(不是在我们的局域网或子网上),都在运行Chrome

同样,父帧和嵌入iframe的两个域是相同的。这只会发生在通过HTTPS运行的生产服务器上。其他非HTTPS站点(例如,我们的开发环境localhost)没有这个问题。我们的SSL是有效的。由于这是一个单页AJAX应用程序,我们试图避免弹出另一个下载窗口

希望有人能提供一些建议。提前谢谢


更新:经过进一步研究,我发现解决此问题的方法是将响应标题中的文件名用双引号括起来。

我找到了问题的原因。Google Chrome文件名中有逗号的文件有问题。当通过直接链接下载文件时,Chrome会报告服务器报告了重复的标题。这是Chrome的一个长期问题,一直没有得到解决。其他浏览器不易受到此问题的影响。不过,这是一个相当容易解决的问题,事实上,当我搜索这个错误时,第一个搜索结果有了解决方案:在处理来自Google Chrome的请求时,从文件名中删除逗号

然而,这不是一个直接链接,而是一个AJAX请求,这导致了一个不同的异常。在这种情况下,Chrome提供的错误是跨源请求异常,这使得故障排除变得非常困难


因此,tl;最重要的是去掉上传文件名称中的逗号

我发现的另一个发生此问题的实例是在执行类似以下代码之后:

document.domain='[与iframe最初拥有的域完全相同]'


删除这行代码为我消除了此错误。

可能是一个偶然的机会,因为您注意到协议是相同的,但是您确定您正在通过
https:
访问
?您引用的错误消息包含
http:
。这是我的错误复制。它确实是https。有没有可能,您使用的是无协议url?-//example.com/Nope。Chrome的开发者工具网络视图显示该调用为HTTPS,并指向同一域。您是否有指向Chrome bug的链接?