Compilar um Servidor HTTP simples em C [fechado]

Preciso de construir um Servidor HTTP simples em C. alguma orientação? Links? Amostras?

Author: Ry-, 2008-10-07

12 answers

Sugiro que dê uma vista de olhos a minúscula httpd. Se você quiser escrevê-lo do zero, então você vai querer completamente ler RFC 2616. Use os 'sockets' BSD para aceder à rede a um nível muito baixo.

 78
Author: Adam Rosenfield, 2008-10-06 22:13:39
Eu recomendaria que você desse uma olhada em um guia prático para escrever clientes e Servidores

O que você tem que implementar em etapas incrementais é:

  1. ponha a sua camada básica de 'sockets' TCP a funcionar (ouvir as portas/portos, aceitar as ligações dos clientes e enviar/receber os dados).
  2. Implemente um leitor buffer para que possa ler os pedidos de uma linha (delimitada pelo CRLF) de cada vez.
  3. Leia a primeira linha. Analisar o método, a versão do pedido e a caminho.
  4. implementar o processamento do cabeçalho para a sintaxe" Header: value". Não se esqueça de desdobrar cabeçalhos dobrados.
  5. verifique o método de pedido, o tipo de Conteúdo e o tamanho do conteúdo para determinar como/se o corpo será lido.
  6. implementar a descodificação do conteúdo com base no tipo de conteúdo.
  7. Se você vai suportar o HTTP 1.1, implemente coisas como" 100 Continue", mantenha-se vivo, transferência chunked.
  8. Adicionar robustez / medidas de segurança como detectar pedidos incompletos, limitar o número máximo de clientes, etc.
  9. encolher o seu código e abrir o código it:)
 110
Author: Ates Goral, 2013-10-12 15:10:02

Mongoose (Anteriormente Servidor HTTP simples) é muito bom. Em particular, é incorporável e compila sob Windows, Windows CE e UNIX.

 24
Author: Bob Nadler, 2013-04-09 14:45:49

Um Servidor HTTP é conceptualmente simples:

  • Abrir porta 80 para ouvir
  • Quando o contacto é feito, reúna um pouco de informação (obtenha principalmente - você pode ignorar o resto por agora)
  • traduza o pedido para um ficheiro
  • Abra o ficheiro e cuspa-o de volta para o cliente

Torna - se mais difícil dependendo da quantidade de HTTP que você deseja suportar-POST é um pouco mais complicado, scripts, lidar com vários pedidos, etc.

Mas a a base é muito simples.

 24
Author: Adam Davis, 2018-06-23 15:53:56

Abrir um 'socket' TCP na porta 80, começar a ouvir as novas ligações, implementar isto . Dependendo dos seus propósitos, você pode ignorar quase tudo. Na mais fácil, você pode enviar a mesma resposta para cada pedido, o que apenas envolve a escrita de texto para o socket.

 11
Author: Eclipse, 2008-10-06 22:12:41

Olhe para nweb (servidor Web de Nigel), "um servidor web minúsculo e seguro [...] com apenas 200 linhas de código-fonte C":

Https://drive.google.com/file/d/0B3msld7qnNOhN1NXaFIwSFU2Mjg/view?usp=sharing http://www.ibm.com/developerworks/systems/library/es-nweb/

O artigo Inclui pseudocódicos, explicações e comentários.

EDIT: a ligação da IBM morreu. Eu guardei um PDF da página web para o Google Drive. Aqui está o código. telecarregamento:

Https://drive.google.com/file/d/0B3msld7qnNOhSGZGdDJJMmY0VHM/view?usp=sharing

@ankushagarwal ([5]} fez algumas alterações e fez o upload da sua versão no GitHub.: https://github.com/ankushagarwal/nweb

 9
Author: XP1, 2016-06-30 23:59:54
Eu escrevi o meu que podes usar. Este trabalho tem sqlite, é thread safe e está em C++ Para UNIX.

Você deve ser capaz de escolhê-lo e usar o código compatível com C.

Http://code.google.com/p/mountain-cms/

 5
Author: Daniel A. White, 2008-10-06 22:30:41

O http spec e Firebug foram muito úteis para mim quando tive de o fazer para Os meus trabalhos de casa.

Boa sorte com a tua. :)
 5
Author: Omer van Kloeten, 2008-10-06 22:38:50
Eu sugeria que se olhasse para a fonte para algo como o lighthttpd.
 4
Author: warren, 2008-10-06 22:12:32

Http://www.manning.com/hethmon/ -- "Illustrated Guide to HTTP by Paul S. Hethmon" from Manning é um livro muito bom para aprender o protocolo HTTP e será muito útil para alguém implementá-lo / estendê-lo.

 2
Author: anjanb, 2008-10-07 01:23:04

Usar as funções de 'socket' específicas da plataforma para encapsular o protocolo HTTP, tal como fizeram os tipos atrás do Apache .

 1
Author: arul, 2008-10-06 22:13:26

Existe um duplicado com mais respostas .

Um candidato ainda não mencionado é spserver .

 1
Author: akauppi, 2017-05-23 12:02:45