Как видно из названия, я хотел бы написать HTTP-сервер. У меня вопрос такой, как мне это сделать? Я знаю, это звучит ОЧЕНЬ вообще и слишком "на высоком уровне", но в моем безумии есть метод. Я полагаю, что ответ на этот вопрос должен быть независимым от языка; То есть, независимо от того, какой язык я использую (например, C, C ++, Java и т. д.), ответ должен быть одинаковым. У меня есть общее представление о том, как это должно работать:
- Откройте сокет на порту 80.
- Подождите, пока клиент сделает запрос.
- Прочитайте запрос (то есть, этот человек хочет страницу "contact-us.html").
- Найдите и прочитайте "contact-us.html".
- Отправьте заголовок html, затем отправьте содержимое "contact-us.html"
- Выполнено
Как я уже сказал, я считаю, что это процесс, но я не уверен на 100%. Это подводит меня к сути моего вопроса. Как или где человек узнает эту информацию?
Что если я не хочу писать только HTTP-сервер, а что если я хочу написать FTP-сервер, чат-сервер, средство просмотра изображений и т. Д.? Как человек узнает точные шаги / процесс, необходимые для создания работающего HTTP-сервера?
Сотрудник рассказал мне о заголовке html, поэтому я бы никогда не узнал об этом без него. Он также сказал что-то о передаче каждого запроса в новую ветку. Есть ли большая книга о том, как все работает? Есть ли какое-то руководство о том, что нужно, чтобы стать HTTP-сервером?
Я попытался погуглить «как работает HTTP-сервер», но единственные ответы, которые я мог найти, были направлены на вашего среднего Джо, а не на человека, желающего запрограммировать HTTP-сервер.
источник
Ответы:
Используйте RFC2616 , Люк!
Вы читаете RFC 2616 по HTTP / 1.1 , и вы идете на это.
На самом деле это был проект на третьем курсе инженерной школы, и это в значительной степени описание проекта.
инструменты
Ваши инструменты:
Забавные Соображения
Что нужно учесть для дополнительного удовольствия:
Веселиться. Это очень крутая вещь.
Другие (более простые) предложения
Сначала их гораздо проще решать, а их RFC намного легче переварить (ну, у IRC есть несколько странных частей, но у FTP довольно ясно).
Выбор языка
Конечно, некоторые детали реализации будут сильно зависеть от языка и стека, которые вы используете для его реализации. Я подошел ко всему этому в C, но я уверен, что это может быть весело и на других языках (хорошо, может быть, не так весело, но все же весело).
источник
You still have lots of room for your architecture design, but it's a pretty good and directive spec.
вы:yes and no
. Я думаю, что мы уже сузились, чем RFC было не всем. И я думаю, что OP должен затем обнаружить эти вещи, а не прямо указывать на них больше, чем то, что я уже сделал в разделах «дополнительных соображений» и других вещах. Это часть веселья.Каждый из протоколов, используемых в Интернете, указан в одном или нескольких общедоступных документах, называемых RFC. Все текущие RFC можно найти по адресу http://www.rfc-editor.org/ , который также имеет приличную функцию поиска.
Протокола НТТР (версия 1.1), например, указано в RFC2616 и протокол FTP указывается в RFC959 .
Что касается спецификации, то RFC, на мой взгляд, очень хорошо читаются.
источник
In 2014, RFC2616 was replaced by multiple RFCs (7230-7237).
. Итак, как найти обновленные RFC, если они есть? Должен ли я проверитьObsoleted by
список?