为什么数据:网络世界中的URI支持如此之差?

时间:2014-10-10 12:54:09

标签: ajax redirect cors data-uri http-status-code-308

我正在挖掘数据URI一段时间。通过一些测试,我发现数据URI的许多用途都不起作用。难道我做错了什么?或者我是否必须向开发人员提交错误?

问题#1

在重定向到某些可用(大)数据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');

这在某些环境中会中断。

问题#2

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中产生错误。

问题#3

在某些浏览器(特别是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版本。

<小时/> 有没有解决方法?或者我们应该等待修复错误?或者任何想法?

0 个答案:

没有答案