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

Предоставляют ли браузеру трейлеры, отправленные в ответных ответах на кодирование?

HTTP/1.1 указывает, что ответ, отправленный как Transfer-Encoding: chunked, может включать в себя необязательные трейлеры (то есть, что обычно отправляется как заголовки, но по какой-либо причине не может быть рассчитан до содержимого, поэтому они могут быть добавлены до конца), например:

Запрос:

GET /trailers.html HTTP/1.1
TE: chunked, trailers

Ответ:

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Trailer: My-Test-Trailer
D\r\n
All your base\r\n
B\r\n;
 are belong\r\n
6\r\n
 to us\r\n
0\r\n
My-Test-Trailer: something\r\n
\r\n

Этот запрос указывает в заголовке TE, что он ожидает ответ chunked, и будет искать trailers после последнего фрагмента.

Ответ указывает в заголовке Trailer список трейлеров, которые он будет отправлять (в этом случае только один: My-Test-Trailer)

Каждый из кусков отправляется как:

  • размер фрагмента в шестнадцатеричном формате (D= 13), за которым следует CRLF
  • chunk data (All your base), за которым следует CRLF

Блок нулевого размера (0\r\n) указывает конец тела.

Затем указан трейлер (My-Test-Trailer: something\r\n), за которым следует заключительный CRLF.

Теперь, из всего, что я читал до сих пор, трейлеры редко используются (если вообще когда-либо). Большинство обсуждений здесь и в других местах относительно трейлеров обычно начинаются с "но почему вы все равно хотите использовать трейлеры?".

Отбросив вопрос о том, почему, из любопытства, я пытался имитировать обмен HTTP-запросов/ответов, который использует трейлеры; но до сих пор я еще не смог заставить его работать, и я не уверен, что если что-то не так с ответом, который я генерирую, или, как некоторые предложили, просто нет клиентов, которые ищут трейлинг-заголовки.

Клиенты, которые я пробовал, включают: curl, wfetch, Chrome + jQuery.

Во всех случаях клиент получает и правильно восстанавливает ответный вызов (All your base are belong to us); и я вижу в заголовках ответов, что отправляется Trailer: My-Test-Trailer; но я не вижу My-Test-Trailier: something, возвращаемого как в заголовках ответов, так и в любом месте. Неясно, должен ли заголовок заголовка, подобный этому, появляться в клиенте в качестве обычного заголовка ответа после того, как весь ответ был получен и соединение закрыто?

Интересно, что журналы изменений завихрения показывают, что завиток поддерживает дополнительные трейлеры, и этот завиток обрабатывает любые трейлеры, которые он находит в обычный поток заголовков.

Знает ли кто-нибудь:

  • действительного URL-адреса, который я мог бы выполнить ping, который отправляет трейлеры в ответный ответ? (чтобы я мог подтвердить, не работает ли мой тестовый ответ); и
  • какие клиенты, как известно, поддерживают (и получают доступ/отображать) трейлеры, отправленные сервером?
4b9b3361

Ответ 1

Нет общих браузеров, поддерживающих HTTP/1.1 трейлеры. Посмотрите на столбец "Заголовки в трейлере" на вкладке "Сеть" browserscope.

  • Chrome: Нет, и не будет исправлено (bug). Поддерживает трейлеры H/2 (bug).
  • Firefox: Нет, и я не вижу билета в bugzilla для этого. Появляется для поддержки H/2.
  • IE: Нет
  • Край: Нет
  • Safari: Нет
  • Opera: только старые версии (v10-12, удалены в 14)

Как вы обнаружили, несколько поддерживающих его клиентов не поддерживают браузер.

Ответ 2

Поскольку this commit, Jodd HTTP-клиент Java поддерживает заголовки трейлеров.

По первому вопросу, я еще не нашел никакого живого ответа, который их использует;)