Подтвердить что ты не робот

Существует ли де-факто или установлена ​​причина, почему многопроцессорные ответы HTTP обычно не поддерживаются в браузерах?

Протокол HTTP поддерживает многочастные ответы в течение длительного времени. Я использовал их раньше для API-интерфейсов с соответствующим образом оборудованными потребителями, но, похоже, поддержка браузеров для них не очень хороша и не улучшилась за последние пол-десятилетия. Мне трудно найти много информации о том, почему это может быть. Мне бы очень хотелось, чтобы можно было сократить HTTP-запросы, отправив все те ресурсы, которые, как мне известно, понадобятся веб-серверу при первоначальном запросе, особенно для приложений, использующих фреймворки на стороне клиента, такие как Backbone.js.

Есть ли какие-либо официальные документы, торговые статьи, неудачные эксперименты или другие доказательства того, почему ни браузеры, ни евангелисты веб-производительности не уделяют этому долговременному HTTP-конструкту никакого внимания?

Чтобы быть предельно ясным, я не ищу мнения, но истинное доказательство того, почему это может быть. Например, если Mozilla опубликовала что-то об этом несколько лет назад, или есть закрытый билет в трекер Firefox, где ведущий разработчик комментирует, почему они не будут реализовывать это.

4b9b3361

Ответ 1

На самом деле более старые версии IE обрабатывали ответные запросы multipart application/octet-stream и сохраняли все файлы во время операции загрузки, но это было недавно удалено (как и для IE7, я думаю) и было специфично только для загрузки.

Я сомневаюсь, что вы найдете "доказательство", которое вы ищете, потому что я не думаю, что предлагаемое вами предложение соответствует "духу" спецификации HTTP. Я попытаюсь объяснить, что я имею в виду. Основная парадигма HTTP - это клиентский запрос и ответ сервера на этот запрос. Но вы, кажется, предлагаете, чтобы сервер возвращал произвольные файлы с предположением, что клиент будет знать, что с ними делать.

Однако, если вы хотите предложить, чтобы клиент сначала запрашивал несколько файлов, я бы сказал, что вы можете что-то сказать. Спецификация HTTP 1.1 позволяет заголовку Accept-клиента Accept указывать поддержку мультиплексирования, поэтому это будет выглядеть так, как проектировщики HTTP предполагали, что это работает. К сожалению, спецификация умалчивает о том, как клиент должен идентифицировать файлы, которые он ожидает получить, и это понятно, если вы посмотрите на HTTP в вакууме, как это определено, а не через объектив браузеров и веб-сайтов. Это подробная информация о реализации, которая остается за клиентом и сервером. Это проблема, которая относится к другому уровню - то, что содержание и как оно потребляется, а не как его запрашивать и транспортировать.

Легко представить различные решения, конечно, но без стандарта, на которые они ссылаются, казалось бы, не оправдывает усилий разработчиков браузеров. Я мог бы представить, что кто-то вроде Microsoft (с контролем над широко используемым сервером и браузером) реализует это, но они будут изобретать спецификацию, и люди будут жаловаться. По-видимому, мы решили, что лучше подождать 10 лет, чтобы W3C согласился что-то...

Ответ 2

Непосредственно из самого W3 org (at http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7.2):

3.7.2 Многостраничные типы

MIME предоставляет несколько типов "multipart" - инкапсуляции одного или нескольких объектов внутри одного тела сообщения. Все многочастные типы совместно используют общий синтаксис, как определено в разделе 5.1.1 RFC 2046

[40] и ДОЛЖЕН включать параметр границы как часть типа медиафайла стоимость. Тело сообщения само является элементом протокола и ДОЛЖНЫ поэтому используйте только CRLF для представления разрывов между частями тела. В отличие от RFC 2046, эпилог любого многостраничного сообщения ДОЛЖЕН быть пусто; HTTP-приложения НЕ ДОЛЖНЫ передавать эпилог (даже если оригинал мультипартии содержит эпилог). Эти ограничения существуют в чтобы сохранить саморазграничивающий характер многочастного сообщения, тело, в котором "конец" тела сообщения обозначается концом многогранная граница.

В общем, HTTP обрабатывает многочастное тело сообщения не иначе, как любой другой тип носителя: строго как полезная нагрузка. Единственным исключением является тип "multipart/byteranges" (приложение 19.2), когда он появляется в 206 (Частичное содержимое), который будет интерпретироваться по HTTP механизмов кэширования, как описано в разделах 13.5.4 и 14.16. В целом в других случаях пользовательский агент HTTP ДОЛЖЕН следовать тому же или аналогичному поведение в качестве пользовательского агента MIME при получении многостраничного типа. Поля заголовка MIME в каждой части тела многочастного сообщения, тело не имеют никакого значения для HTTP, кроме того, что определено их Семантика MIME.

В общем, пользовательский агент HTTP ДОЛЖЕН следовать тому же или аналогичному поведение в качестве пользовательского агента MIME при получении многостраничного типа. Если приложение получает непризнанный множественный подтип, приложение ДОЛЖНО относиться к нему как к эквиваленту "multipart/mixed".

  Note: The "multipart/form-data" type has been specifically defined
  for carrying form data suitable for processing via the POST
  request method, as described in RFC 1867 [15].