Почему данные: поддержка URI в веб-мире настолько плоха?

Я копаюсь в URI данных некоторое время. В ходе некоторого тестирования я обнаружил, что многие URI данных просто не работают. Я делаю что-то неправильно? Или я должен сообщать об ошибках разработчикам?

Проблема № 1

Есть много веб-серверов, которые выдают ошибки (т.е. 500 Internal Server Error) при перенаправлении на некоторые используемые (большие) URI данных.

Этот метод действительно необходим, потому что он позволит браузерам кэшировать ресурсы НАВСЕГДА, и пользователь может добавить в закладки все содержимое ресурса (и даже больше).

Пример в 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 в их браузере. Пожалуйста, смотрите https://bugzilla.mozilla.org/show_bug.cgi?id=786275 в Mozilla для деталей. Из-за этой ошибки их браузер просто не работает.

Это может быть серьезным стандартным нарушением. Это также означает, что мои программы показывают недружественные ошибки в Chromium/Google Chrome, которыми пользуются многие пользователи.

Что больше всего раздражает то, что при использовании #hash в URI эти перенаправления всегда терпят неудачу!

/redirecting-to-data-uri.php#hash

перенаправляет на (#hash сохраняется на стороне клиента) ->

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 ответов

Другие вопросы по тегам