Конец заголовка HTTP - PullRequest
       17

Конец заголовка HTTP

0 голосов
/ 21 мая 2018

Я пытаюсь построить программу, которая идентифицирует конец заголовка.Теперь я знаю, что заголовки http заканчиваются пустой строкой, как сказано в Обнаружение конца заголовка http get request (java) , однако, насколько я понимаю, это не всегда так.

Например, в multipart у вас есть тип контента с границей, и в этой границе есть пустое пространство, например

Reading line: POST /hello:hello HTTP/1.1
Reading line: bla: bla
Reading line: Content-Type: multipart/form-data; boundary=--------------------------276559868742390689469124
Reading line: cache-control: no-cache
Reading line: Postman-Token: be8db757-81f4-49db-9187-30d66d0dd3d5
Reading line: User-Agent: PostmanRuntime/7.1.5
Reading line: Accept: */*
Reading line: Host: localhost:8080
Reading line: accept-encoding: gzip, deflate
Reading line: content-length: 498
Reading line: Connection: keep-alive
Reading line: 
Reading line: ----------------------------276559868742390689469124
Reading line: Content-Disposition: form-data; name=""; filename="TimeComplexity.txt"
Reading line: Content-Type: text/plain

, поэтому очевидно, что поиск пустого пространства не всегда работает.Однако я заметил, что Content-Type, за которым следует пробел, всегда является концом HTTP-заголовка, верно?и если нет, то какие еще есть решения?кроме извлечения длины содержимого и извлечения содержимого перед заголовком, это кажется .. медленным.Могу также упомянуть, что я пытаюсь проанализировать сообщение в java, но я не возражаю против примеров на других языках, если вы вставляете какой-либо код, однако я стараюсь понять это теоретически, я думаю, что могу справиться с остальными.

Заранее спасибо!

1 Ответ

0 голосов
/ 21 мая 2018

Заголовки HTTP могут быть в любом порядке.Каждый заголовок заканчивается CRLF, и после последнего заголовка есть единственный CRLF, создающий пустую строку.Это означает, что заголовков больше нет.Остальное тело сообщения HTTP.См. RFC 2616 для спецификации протокола HTTP.

Ваш последний заголовок HTTP - заголовок Connection.Следующие данные тела (размером 498 байт) представляют собой данные MIME в формате multipart/form-data.MIME выглядит аналогично HTTP, в нем также есть заголовки и тело, разделенные пустой строкой.Но у MIME также есть границы, разделяющие различные разделы данных MIME, и у каждого раздела есть свои собственные заголовки и тело.См. RFC 2045 - 2047 , 7578 и другие RFC, связанные с MIME.

...