Почему протокол HTTP разработан в виде простого текста? - PullRequest
27 голосов
/ 26 декабря 2008

Вчера у меня была дискуссия с коллегами по HTTP. Спрашивается, почему HTTP разработан в виде простого текста. Конечно, он может быть разработан в двоичном виде, как и протокол TCP, с использованием флагов для представления различных видов методов (POST, GET) и переменных (заголовки HTTP). Итак, почему HTTP разработан таким образом? Есть ли технические или исторические причины?

Ответы [ 10 ]

51 голосов
/ 26 декабря 2008

A причина техническая и историческая в том, что текстовые протоколы почти всегда предпочитаются в мире Unix.

Ну, это на самом деле не причина, а шаблон . Это объясняется тем, что текстовые протоколы позволяют вам видеть , что происходит в сети, просто сбрасывая все, что происходит. Вам не нужен специализированный анализатор, как вам нужно для TCP / IP. Это облегчает отладку и обслуживание.

Не только HTTP, но и многие протоколы основаны на тексте (например, FTP, POP3, SMTP, IMAP).

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

17 голосов
/ 26 декабря 2008

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

8 голосов
/ 26 декабря 2008

Многие протоколы интернет-приложений используют более-менее простой текст для протокола (см. FTP, POP, SMTP и т. Д.).

Это значительно облегчает взаимодействие и устранение неисправностей.

6 голосов
/ 26 декабря 2008

HTTP означает «Протокол передачи гипертекста».

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

То, что мы делаем с HTTP сейчас, намного превосходит его первоначальные намерения.

4 голосов
/ 26 декабря 2008

Как и в RFC 2616, раздел 3.7.1 для HTTP 1.1 , ключевым идентификатором строки команды или заголовка является текстовый разрыв строки CRLF; текстовые прикладные протоколы упрощают общение (для устранения неполадок) исключительно с клиентом Telnet. Это также облегчает программирование с помощью вызовов ReadLine () и соответствующих текстовых строк.

Разрыв параметра CRLF также дает почти неограниченные расширения заголовка абитера в отличие от заголовков TCP или IP фиксированного размера, где один жестко кодирует смещение по битам.

2 голосов
/ 03 марта 2011

В случае http некоторые люди работают над «бинарной» версией, они называют это Embedded Binary HTTP (EBHTTP)

http://tools.ietf.org/html/draft-tolle-core-ebhttp-00

2 голосов
/ 26 декабря 2008

Так проще «прочитать» трафик или создать клиента или сервер?

Вы можете обсудить, облегчает ли это на самом деле , но, конечно, это было намерением.

1 голос
/ 20 апреля 2013

Мне нравится:

... предпочтительнее в мире Unix.

причина, но не объясняется почему.

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

A) Вы можете задокументировать дерьмо из бессмысленной тарабарщины (двоичной).

B) Разработайте или надейтесь, что другие разработают инструменты, которые будут изображать ваш бессмысленный тарабарщина осмысленно.

или

A) Вы можете задокументировать дерьмо из осмысленного текста, который использует язык в качестве инструмента для самодокументируемого протокола.

B) Нет необходимости в дополнительных инструментах, и дополнительные инструменты будут намного легче писать и отлаживать.

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

Представьте себе мир, в котором установка значения заголовка не так проста, как словарь / карта где-то в вашей структуре. Когда вы сталкиваетесь с ошибками, вам нужно постоянно задавать вопрос, правильна ли ваша структура или нет, потому что вы не могли легко увидеть, что она работает правильно без дополнительных инструментов. Это был бы мир HTTP, если бы каждая инфраструктура нуждалась в изобретении / реализации собственной абстракции более высокого уровня (на ум приходят браузеры).

Многие разработчики протоколов стремятся к эффективности, эта конструкция ориентирована на удобство использования, которое имеет первостепенное значение в индустрии разработки программного обеспечения. Неиспользуемые инструменты, которые преждевременно оптимизированы, создают ненужную нагрузку для разработчиков программного обеспечения, и эта нагрузка проявляется повсеместно.

1 голос
/ 26 декабря 2008

Исторически все начинается с RFC822 (СТАНДАРТ ДЛЯ ФОРМАТА СООБЩЕНИЙ В ИНТЕРНЕТЕ ARPA), последней версией которого является RFC5322 (формат сообщений Интернета). SMTP (RFC 821) был одним из самых популярных протоколов, основанных на RFC822. И HTTP родился из SMTP (ваш почтовый протокол).

0 голосов
/ 09 марта 2015

Теперь, двоичный код на основе HTTP / 2, он гораздо менее подвержен ошибкам.

https://http2.github.io/faq/#why-is-http2-binary

...