Мне нужно создать простой HTTP-сервер в C. Любое руководство? Ссылки? Образцы?
Создайте простой HTTP-сервер в C
Ответ 1
Я предлагаю вам взглянуть на крошечный httpd. Если вы хотите написать его с нуля, вам нужно будет полностью прочитать RFC 2616. Используйте сокеты BSD для доступа к сети на действительно низком уровне.
Ответ 2
Я бы рекомендовал вам взглянуть на: Практическое руководство по написанию клиентов и серверов
То, что вам нужно реализовать с помощью дополнительных шагов, это:
- Получите ваш базовый уровень сокетов TCP (прослушивайте порт/порты, принимайте соединения с клиентом и отправляйте/получайте данные).
- Внедрение буферизованного считывателя, чтобы вы могли читать запросы по одной строке (ограничиваясь CRLF) за раз.
- Прочитайте первую строку. Разберите метод, версию запроса и путь.
- Внедрить синтаксис заголовка для синтаксиса "Заголовок: значение". Не забывайте разворачивать сложенные заголовки.
- Проверьте способ запроса, тип контента и размер содержимого, чтобы определить, как/если тело будет считано.
- Внедрить декодирование содержимого на основе типа содержимого.
- Если вы собираетесь поддерживать HTTP 1.1, реализуйте такие вещи, как "100 Continue", keep-alive, chunked transfer.
- Добавить меры безопасности/безопасности, такие как обнаружение неполных запросов, ограничение максимального количества клиентов и т.д.
- Сократите ваш код и с открытым исходным кодом:)
Ответ 3
Mongoose (ранее простой HTTP-демон) довольно хорош. В частности, он встраивается и компилируется под Windows, Windows CE и UNIX.
Ответ 4
HTTP-сервер концептуально прост:
- Открытый порт 80 для прослушивания
- Когда контакт сделан, собрать небольшую информацию (в основном - вы можете игнорировать остальные на данный момент)
- Перевести запрос в файл
- Откройте файл и верните его обратно на клиенте
Это становится сложнее в зависимости от того, сколько HTTP вы хотите поддерживать - POST немного сложнее, скрипты, обработка нескольких запросов и т.д.
Но база очень проста.
-Adam
Ответ 5
Откройте TCP-порт на порту 80, начните прослушивание новых подключений, внесите этот. В зависимости от ваших целей вы можете игнорировать почти все. В самом простом случае вы можете отправить один и тот же ответ для каждого запроса, что просто связано с записью текста в сокет.
Ответ 6
Посмотрите на nweb (Nigel Web Server), "крошечный безопасный веб-сервер [...] с только 200 строк исходного кода C":
https://drive.google.com/file/d/0B3msld7qnNOhN1NXaFIwSFU2Mjg/view?usp=sharing
http://www.ibm.com/developerworks/systems/library/es-nweb/
В статье представлены псевдокоды, пояснения и комментарии.
EDIT: ссылка IBM умерла. Я сохранил PDF файл веб-страницы на Google Диске. Вот загрузка кода:
https://drive.google.com/file/d/0B3msld7qnNOhSGZGdDJJMmY0VHM/view?usp=sharing
@ankushagarwal внесла несколько изменений и загрузил свою версию на GitHub: https://github.com/ankushagarwal/nweb
Ответ 7
Я написал свое собственное, что вы можете использовать. Этот работает с sqlite, является потокобезопасным и находится в С++ для UNIX.
Вы должны быть в состоянии выделить его и использовать C-совместимый код.
Ответ 8
HTTP spec и Firebug были очень полезны для мне, когда я должен был сделать это для моей домашней работы.
Удачи вам.:)
Ответ 9
Я бы предложил посмотреть источник на что-то вроде lighthttpd.
Ответ 10
http://www.manning.com/hethmon/ - "Иллюстрированное руководство по HTTP от Paul S. Hethmon" от Manning - очень хорошая книга для изучения протокола HTTP и будет очень полезен для тех, кто его реализует/расширяет.
Ответ 11
Используйте функции сокетов для конкретных приложений, чтобы инкапсулировать протокол HTTP, как и парни, стоящие за Apache.
Ответ 12
Существует дубликат с большим количеством ответов.
Один кандидат, еще не упомянутый, spserver.