Запутался в протоколе HTTP

#http #web-applications #client-server #protocols

#http #веб-приложения #клиент-сервер #протоколы

Вопрос:

Я немного запутался в протоколе HTTP, из того, что я знаю, HTTP был создан для доставки веб-страниц и в первую очередь отправки сообщений между веб-сервером и браузером. Но кажется, что HTTP используется везде во многих приложениях, которые действительно используют Интернет для общения, но не являются веб-приложением («приложение, которое использует веб-браузер в качестве клиента»).

Я спрашиваю об этом, потому что я начал разрабатывать приложение для iPhone (своего рода навигационное приложение), и мне нужно отправлять сообщения между клиентом iPhone и моим сервером. Теперь люди продолжают говорить мне использовать протокол HTTP, но действительно ли это правильный путь?

Ответ №1:

Ваш вопрос верен, если я могу повторить, почему мы используем HTTP для каждого взаимодействия сервер-клиент, в то время как он обычно предназначался для случая использования браузера-веб-сервера и может быть менее эффективным по сравнению с прямой связью TCP. Мои причины ниже :

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

Комментарии:

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

2. Это зависит от того, что протокол без состояния имеет свои преимущества, если вы можете разработать свои требования вокруг него и воспользоваться преимуществами того, что ваш сервер не имеет состояния. Но это не значит, что все приложения могут быть помещены в этот usecase. Типичный способ поддержания состояния в http — на стороне клиента с использованием файлов cookie. Теперь есть много обходных путей для удовлетворения ваших потребностей, таких как «Зависание GET / COMET» или более новые WebSockets.

3. Еще одна причина, по которой он широко используется в Интернете, и он дружелюбен к брандмауэру.

Ответ №2:

Да, это правильный путь. Как еще вы хотите это сделать?

 Web Server <-------HTTP-------> Client
  

Клиентом может быть браузер, мобильный телефон, xbox. Все, что находится на принимающей стороне запроса сервера, является клиентом.

Комментарии:

1. Да, HTTP — это путь для сетевого взаимодействия клиент / сервер. Теперь мы (наконец) видим массовый переход от безумия SOAP к HTTP. @Eyal: обязательно ознакомьтесь с REST (и REST vs SOAP wars 2001-2010), если вас интересуют увлекательные проблемы, стоящие за децентрализованными сетевыми системами.

Ответ №3:

Согласен, что переход на REST и ЗАПРОС из SOAP — это хорошо. В настоящее время мы внедряем систему, которая будет использовать HTTP в качестве механизма двунаправленной передачи. Ответом на отправку на сервер является стандартный HTTP-ответ, такой как 200 = успех без тела. Ответ на запрос представляет собой текстовую страницу ASCII с ответом в качестве тела. Затем мы просто превращаем ASCII обратно в двоичный файл, чтобы использовать данные. Преимущество этого метода заключается в том, что вам просто нужно указать правильный URL и параметры, и вы можете справиться со всем. Если ваш стек протоколов не знает, как форматировать запросы post и get, вам нужно будет сделать это самостоятельно. Хотя это утомительно, это хорошо документировано в протоколах W3C, однако немного утомительно проходить через все это самостоятельно. Так что, если вам нужно это сделать, я рекомендую получить электронную книгу, которая поможет разобраться в деталях. Вот некоторые примеры: HTTP