Javascript 数据URI方案与CORS
我认为数据URI方案不是跨域请求,但我发现firefox和chrome的行为方式非常不同 我知道这样做有点奇怪。 问题不是为什么他妈的要你对一个数据做请求:text/json;,URI?,但这可能吗 Firefox有,chrome没有。根据,常规来源由Javascript 数据URI方案与CORS,javascript,google-chrome,firefox,cors,Javascript,Google Chrome,Firefox,Cors,我认为数据URI方案不是跨域请求,但我发现firefox和chrome的行为方式非常不同 我知道这样做有点奇怪。 问题不是为什么他妈的要你对一个数据做请求:text/json;,URI?,但这可能吗 Firefox有,chrome没有。根据,常规来源由三元组(uri方案、uri主机、uri端口)组成。由于数据URI方案与HTTP URI方案不同,并且它所描述的URI肯定不具有与web应用程序相同的主机和端口,因此数据URI的来源显然不同 我用php创建了一个示例代码: 在HTTP响应中返回a
三元组(uri方案、uri主机、uri端口)
组成。由于数据URI方案与HTTP URI方案不同,并且它所描述的URI肯定不具有与web应用程序相同的主机和端口,因此数据URI的来源显然不同
我用php创建了一个示例代码:
在HTTP响应中返回
aaa
发送
GEThttp://test.loc/
并在车身中显示aaa
,如果未被CORS阻止
结果:
- msie当前不支持数据URI
- firefox始终显示
aaa
- chrome display
仅当我设置了aaa
,否则它会在沙箱中运行脚本,并对其隐藏XHR响应访问控制允许源代码:null
根据我在Firefox上的bug报告,规范已经更改,所以他们修复了这个问题。因此,数据URI现在在每个受支持的浏览器上都需要allow origin标头。在最后一句话中,您似乎已经回答了自己的问题。我想知道Firefox或Chrome哪一个做得正确。数据URI方案定义RFC 2397没有提及任何内容。AFAIK没有针对同源策略发布的标准,浏览器可以自由决定自己的规则。我阅读了您的mozilla问题,请提供您提到的chrome问题的链接,并更新您的答案。@user2284570什么chrome问题?你能引用我在哪里提到的吗?@user2284570我检查了我的邮件,过滤了“chrome”和“chrome”,但没有找到任何与此错误报告相关的内容。我想是我寄的,因为我是这么写的。顺便说一句,我认为这没关系,我在过去几年中报告了几个关于浏览器不一致性的错误,但所有这些错误都失败了,因为浏览器制造商不想相互沟通并解决它们。我认为这份报告的命运是一样的。由于这种态度,我不喜欢为客户开发,如果可以的话,我会尽量避免。后端要好得多。我可能会在客户端尝试WebGL:这就是像java小程序或flash player这样的技术如此成功的原因:同样的支持,无处不在。为所有设备编写一次代码;‑)。
$.get('data:text/json;,{"foo":"bar"}',function(data){
alert(JSON.stringify(data));
})
aaa
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', "http://test.loc", true);
xhr.onreadystatechange = function (){
if (xhr.readyState==4)
document.body.innerHTML = xhr.responseText;
};
xhr.send();
</script>
<object
data="data:text/html;base64,<?php echo base64_encode(file_get_contents('x.html')); ?>"
></object>