Поддержка браузером составных ответов
-
05-07-2019 - |
Вопрос
Я хотел бы создать HTTP-ответ, используя multipart / mixed, но я не уверен, какие браузеры поддерживают его;и если это так удобно, как кажется, с точки зрения клиента.Честно говоря, мне не нужен конкретно этот тип контента.Я просто хочу передать более одного файла в одном ответе;возможно, есть другой более используемый тип контента.
Решение
Я протестировал это с помощью самодельного сервера и простого ответа.Не уверен, что ответ правильно сформирован, потому что ни один браузер не понимает его на 100% нормально.Но вот результаты:
- Firefox 67.0.1 (64-разрядный):Отображается только последняя часть, остальные игнорируются.
- IE 11.503:Сохраняет все содержимое в одном файле (включая границы), ничего не отображается.
- Chrome Май 2019:Сохраняет все содержимое в одном файле, ничего не отображается.
- Сафари 4:Сохраняет все содержимое в одном файле, ничего не отображается.
- Opera 10.10:Что-то странное.Запускает рендеринг первой части в виде обычного текста, а затем все очищает.Индикатор выполнения загрузки зависает на 31%.
Вот полный ответ, если кто-нибудь обнаружит какую-либо ошибку, пожалуйста, сообщите мне, и я попробую еще раз:
HTTP/1.1 200 OK
Date: Tue, 01 Dec 2009 23:27:30 GMT
Vary: Accept-Encoding,User-Agent
Content-Length: 681
Content-Type: Multipart/mixed; boundary="sample_boundary";
Multipart not supported :(
--sample_boundary
Content-Type: text/css; charset=utf-8
Content-Location: http://localhost:2080/file.css
body
{
background-color: yellow;
}
--sample_boundary
Content-Type: application/x-javascript; charset=utf-8
Content-Location: http://localhost:2080/file.js
alert("Hello from a javascript!!!");
--sample_boundary
Content-Type: text/html; charset=utf-8
Content-Base: http://localhost:2080/
<html>
<head>
<link rel="stylesheet" href="http://localhost:2080/file.css">
</head>
<body>
Hello from a html
<script type="text/javascript" src="http://localhost:2080/file.js"></script>
</body>
</html>
--sample_boundary--
Другие советы
По моему опыту, многочастные ответы работают в Firefox, но не в Internet Explorer. Это было 2 года назад с использованием браузеров того времени.
У меня были многокомпонентные ответы HTTP, работающие для потока изображений JPEG. Например, IP-камеры Axis используют для своего движения поток JPEG для Firefox. Для Internet Explorer Axis требует использования плагина.
Если поддержка Firefox только отвечает вашим требованиям, я рекомендую установить заголовок длины содержимого в каждой части ответа из нескольких частей. Это может помочь сделать идентичными граничную строку в исходном заголовке HTTP и ответе из нескольких частей (в заголовке HTTP отсутствует «-»).
Две идеи:
<Ол> Content-type: multipart / x-mixed-replace
- все остальное должно остаться прежним.