Создание http-сервера - PullRequest
       19

Создание http-сервера

0 голосов
/ 30 апреля 2020

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

Я знаю python и основы c (+) проекта клиент-сервер, но я не Я не понимаю этот протокол HTTP и ничего не понимаю из того, что я прочитал в inte rnet ...

Может кто-нибудь объяснить мне, как работать с этим протоколом? Какова форма пакетов HTTP?

Вот пример 1 проблемы, которую я не понимаю: меня попросили получить пакет (что я и сделал) и понять, что это за запрос, затем отправить обратно имя файла клиенту хочет и после него сам файл. Я распечатал пакет и не понял, где находится запрос или что хочет клиент ...

Большое спасибо!

1 Ответ

2 голосов
/ 30 апреля 2020

Может кто-нибудь объяснить мне, как работать с этим протоколом? Какова форма HTTP-пакетов?

Спецификация может быть полезной.

Что касается webz, вы найдете много спецификаций в RFC. Подробнее об HTTP ниже.


(Поскольку вы, кажется, плохо знакомы с программированием, я подумал, что, возможно, захочу сказать вам следующее:)

Обычно никто не взаимодействует напрямую с HTTP (S) пакеты. Вместо этого вы используете рамки, такие как flask, django, aiohttp и многие другие. Выбор основы зависит от варианта использования. Например:

  • Вам нужна база данных, аутентификация и какие-либо мыслимые функции? Go с Django.
  • Вы просто хотите создать Web-приложение без раздутого фреймворка? Go с Flask.
  • Вам нужен минимум или вы хотите действовать как клиент? Go с aiohttp.

Здесь перечислены другие фреймворки здесь .

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

Вы просто импортируете фреймворк и пишете потрясающе! :)


(В любом случае, здесь приведен небольшой упрощенный обзор полноты)

Итак, HTTP - это текстовый протокол по TCP, который в основном означает, что вы отправляете текст по простому TCP сокет . Когда вы получаете ваш запрос, вы должны «проанализировать» (то есть понять его содержание). К счастью для нас, запросы стандартизированы и следуют той же схеме.

Самый маленький запрос будет выглядеть так:

GET / HTTP/1.0
Host: www.server.com

Первая строка начинается с глагола (также называется запросом) метод) , в нашем примере глагол GET. / обозначает путь. Подумайте о путях файлов на вашем жестком диске. Последняя часть первой строки, а именно HTTP/1.0, сообщает получателю, с какой версией HTTP мы работаем. В настоящее время существует HTTP 1.0 и HTTP 1.1; тем не менее, я бы не стал беспокоиться о HTTP 1.1 и придерживался HTTP 1.0, если вы выполняете запросы самостоятельно.

Наконец, строка Host: www.server.com сообщает нам, с каким сервером мы хотим общаться, так как несколько экземпляров HTTP-сервера могут работать под одним и тем же ip. Это используется для восстановления субдомена.

Если вы отправите этот запрос на HTTP-сервер, вы, вероятно, получите ответ, подобный следующему:

HTTP/1.0 200 OK
Server: Apache/1.3.29 (Unix) PHP/4.3.4
Content-Length: 1337
Connection: close
Content-Type: text/html

<DATA>

Этот ответ содержит статус в первая строка HTTP/1.0 200 OK. Число и «ОК» представляют собой код состояния, говорящий нам, что все в порядке. Есть много кодов состояния со своим собственным значением и использованием.

Строки, следующие за первой, являются так называемыми заголовками ответа. Они предоставляют дополнительную полезную информацию об ответе. Например, когда мы открываем сайт, такой как stackoverflow.com, сервер передает нам файл HTML для интерпретации браузером. Прежде чем мы сможем это сделать, нам нужно знать размер файла HTML.

К счастью, сервер заранее сообщает нам с помощью строки Content-Length: 1337, что размер файла составляет 1337 байт. Сам файл будет присутствовать там, где стоит заполнитель <DATA>.

Есть, опять же, многие из этих заголовков .


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

Вместо этого предпочтительнее использовать одну из структур (для python), перечисленных выше.


В качестве последнего примечания: В процессе объяснения понятий так просто, как Возможно, я пропустил или упростил некоторые вещи. Если вы обнаружите ошибку, пожалуйста, дайте мне знать.

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