Связь с HTTP-сервером - PullRequest
       1

Связь с HTTP-сервером

0 голосов
/ 03 февраля 2012

В настоящее время я пытаюсь запрограммировать свой собственный класс HttpWebRequest.Я уже написал код, который отправляет заголовок и тело запроса на сервер и ожидает ответа.Однако я не уверен, какую кодировку использовать для заголовка.

Мне также было интересно, что было бы хорошим способом обработки ответа (заголовок + тело).Должен ли я попытаться декодировать все полученные данные в строку, или я должен сделать это по-другому?Я думал о том, чтобы отделить заголовок от тела, используя две строки перевода строки / возврата каретки, которые разделяют эти две части.Тогда я смогу декодировать заголовок и оставить тело на потом, когда узнаю его кодировку.

Итак, мои вопросы вкратце:

Какой набор символов HTTP использует для заголовков?Какой хороший способ обработки ответа?

1 Ответ

3 голосов
/ 03 февраля 2012

Сначала я бы порекомендовал вам ознакомиться с RFC-2616 , который является RFC для протокола HTTP 1.1.

Из приведенного выше RFC вы найдете следующее утверждение

Правило TEXT используется только для содержимого описательного поля и значений
, которые не предназначены для интерпретации анализатором сообщений.Слова
из * TEXT МОГУТ содержать символы из наборов символов, отличных от ISO-
8859-1 [22], только если они закодированы в соответствии с правилами RFC 2047
[14].

Заголовки должны использовать кодировку ISO-8859-1, если они не кодируются с использованием кодировки MIME, описанной в RFC-2047.

Что касается синтаксического анализа ответа, который действительно зависит от сообщения.Лично я обработал бы ответ, основанный на BNF, определенном для HTTP, поскольку я идентифицирую токены, которые, как я узнаю, обновил бы состояние анализатора, чтобы обработать остальную часть ответа соответственно.Например, при обработке данных ответа вы можете обнаружить, что ответом является изображение JPG, а длина содержимого равна X, поэтому вы можете настроить соответствующий поток памяти для чтения содержимого, а затем создать изображение и т. Д.

...