我正在挖掘数据URI一段时间。通过一些测试,我发现数据URI的许多用途都不起作用。难道我做错了什么?或者我是否必须向开发人员提交错误?
在重定向到某些可用(大)数据URI时,有许多Web服务器输出错误(即500 Internal Server Error
)。
此方法 确实需要,因为它允许浏览器缓存资源FOREVER,并且用户可以为整个资源内容添加书签(等等)。
PHP中的一个例子:
<?php
header('Location: data:image/svg+xml;base64,' . base64_encode(file_get_contents('complex_image.svg')));
header('HTTP/1.1 308 Permanent Redirect');
这在某些环境中会中断。
Chromium团队对data:
URI安全性(可能,我认为)存在误解,并限制在浏览器中重定向到data:
URI。
有关详细信息,请参阅 Mozilla 的https://bugzilla.mozilla.org/show_bug.cgi?id=786275#c24。
他们的浏览器只是因为这个错误而无法使用。
这可能是严重的标准违规行为。这也意味着我的程序显示许多用户使用的Chromium / Google Chrome上的不友好错误。
最令人讨厌的是,在URI中使用#hash
时,这些重定向始终会失败!
/redirecting-to-data-uri.php#hash
重定向到(#hash
保留在客户端) - &gt;
data:......#hash
在Chromium中产生错误。
在某些浏览器(特别是Firefox)中,以下客户端代码失败:
var xhr = new XMLHttpRequest;
xhr.onload = function() {console.log(this.responseText)};
xhr.open('GET', 'url-to-the-script-redirecting-to-data-uri', true);
xhr.send();
在Firefox中:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at url-to-the-script-redirecting-to-data-uri This can be fixed by moving the resource to the same domain or enabling CORS.
有趣的是,这可能适用于最新的Chromium版本。
<小时/> 有没有解决方法?或者我们应该等待修复错误?或者任何想法?