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, который отправляет трейлеры в ответный ответ? (чтобы я мог подтвердить, не работает ли мой тестовый ответ); и
- какие клиенты, как известно, поддерживают (и получают доступ/отображать) трейлеры, отправленные сервером?