[СИ] HTTP/1.1. Chunked
Язык СИ
ОС UNIX
Помогите разобраться.
Вот выдержки из rfc2616
http://www.ietf.org/rfc/rfc2616
Пункт 3.6.1
Chunked-Body = *chunk
last-chunk
trailer
CRLF
chunk = chunk-size [ chunk-extension ] CRLF
chunk-data CRLF
chunk-size = 1*HEX
last-chunk = 1*("0") [ chunk-extension ] CRLF
chunk-extension= *( ";" chunk-ext-name [ "=" chunk-ext-val ] )
chunk-ext-name = token
chunk-ext-val = token | quoted-string
chunk-data = chunk-size(OCTET)
trailer = *(entity-header CRLF)
----------------------------------------------
Пункт 7.1
entity-header = Allow ; Section 14.7
| Content-Encoding ; Section 14.11
| Content-Language ; Section 14.12
| Content-Length ; Section 14.13
| Content-Location ; Section 14.14
| Content-MD5 ; Section 14.15
| Content-Range ; Section 14.16
| Content-Type ; Section 14.17
| Expires ; Section 14.21
| Last-Modified ; Section 14.29
| extension-header
extension-header = message-header
----------------------------------------------
Пункт 4.2
message-header = field-name ":" [ field-value ]
field-name = token
field-value = *( field-content | LWS )
field-content = <the OCTETs making up the field-value
and consisting of either *TEXT or combinations
of token, separators, and quoted-string>
Пытаюсь написать простой HTTP-клиент.
Для написания и теста парсеров заголовков нужны «максимальные» заголовки,
т. е. наиболее неудобные для парсения.
А получаю только «минимальные», простецкие.
Вот сам написал для теста файл.
HTTP/1.1 200 OK
Set-Cookie: yandexuid=1140701277744450; path=/; domain=.yandex.ru
X-Robot-status: off
transfer-encoding: chunked
Content-Type:
text/html;
charset=windows-1251
My-Var: Proba
8
data-1 ;
8; eda=kolbasa
data-2 ;
8
data-3 ;
0; file=nul
name1: id64;
id65
name2:
id76
konec
В конце пустая строка («\r\n\r\n»).
Чистое тело «data-1 ;data-2 ;data-3 ;»
Вопрос-1.
Правильно ли я понял, что заголовок блока данных (chunked) всегда
одна-единственная строка, и, значит, перенос строки - это верный признак
конца заголовка блока. Как в примере:
" 8; eda=kolbasa"
«0; file=nul»
Вопрос-2.
Правильно ли я понял, что последний нулевой блок может содержать
завершающую запись (trailer), которая подобна обычному верхнему
HTTP-заголовку (а не что-нибудь другое), и, значит, парсить ее
нужно подобным способом?
Кто знает прошу ответить.