Pergunta

Eu preciso construir um servidor HTTP simples em C. Qualquer orientação? Links? Amostras?

Foi útil?

Solução

Eu sugiro que você dê uma olhada pequena httpd . Se você quiser escrever a partir do zero, então você vai querer completamente RFC 2616 . Use BSD soquetes para o acesso à rede em um nível muito baixo.

Outras dicas

Eu recomendo que você dê uma olhada em: Um Guia Prático para Escrevendo clientes e servidores

O que você tem de implementar em passos incrementais é:

  1. Obtenha seu camada básica TCP soquetes em execução (escutar na porta / portos, aceitar conexões de cliente e enviar / receber dados).
  2. Implementar um leitor tamponada de modo que você pode ler os pedidos uma linha (delimitado por CRLF) de cada vez.
  3. Leia a primeira linha. Analisar o método, a versão pedido e o caminho.
  4. Implementar análise do cabeçalho para o "Header: value" sintaxe. Não se esqueça desdobramento cabeçalhos dobrados.
  5. Verifique o método de solicitação, tipo de conteúdo e tamanho do conteúdo para determinar como / se o corpo será lido.
  6. Implementar a decodificação de conteúdo com base no tipo de conteúdo.
  7. Se você estiver indo para dar suporte HTTP 1.1, implementar coisas como "100 continuar", keep-alive, de transferência em partes.
  8. Adicionar medidas robustez / segurança como detectar solicitações incompletas, o que limita o número máximo de clientes etc.
  9. Shrink Wrap seu código e de código aberto que:)

Um servidor HTTP é conceitualmente simples:

  • Abra a porta 80 para ouvir
  • Quando o contato é feito, reunir um pouco de informação (obter principalmente - você pode ignorar o resto por agora)
  • Traduzir a solicitação em uma solicitação de arquivo
  • Abra o arquivo e cuspi-la de volta para o cliente

Ele fica mais difícil, dependendo de quanto de HTTP você quer apoio -. POST é um pouco mais complicado, de scripts, manipulação de várias solicitações, etc

Mas a base é muito simples.

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

Abrir um soquete TCP na porta 80, começar a ouvir para novas conexões, implementar este . Dependendo de suas finalidades, você pode ignorar quase tudo. No mais fácil, você pode enviar a mesma resposta para cada pedido, que apenas envolve a escrita de texto para o socket.

Olhe para nWeb (Web Server de Nigel), "uma pequena, servidor web seguro [...] com apenas 200 linhas de código fonte C":

https://drive.google.com/file/d/ 0B3msld7qnNOhN1NXaFIwSFU2Mjg / vista? usp = partilha http://www.ibm.com/developerworks/systems/library / es-nWeb /

O artigo inclui pseudocódigo, explicações e comentários.

EDIT: Link da IBM morreu. Tenho guardado um PDF da página da Web para o Google Drive. Aqui está o download de código:

https://drive.google.com/file/d/ 0B3msld7qnNOhSGZGdDJJMmY0VHM / vista? usp = partilha

ankushagarwal tem feito algumas mudanças e enviou a sua versão no GitHub: https://github.com/ankushagarwal/nweb

Eu escrevi meu próprio que você pode usar. Este funciona tem SQLite, é thread-safe e está em C ++ para UNIX.

Você deve ser capaz de pegá-lo para além e usar o código compatível C.

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

O HTTP especificação e Firebug foram muito útil para mim quando eu tinha que fazer isso para minha lição de casa.

Boa sorte com o seu. :)

Eu sugiro olhar para a fonte para algo como lighthttpd .

http://www.manning.com/hethmon/ - "Guia Ilustrado para HTTP por Paul S. Hethmon" de Manning é um livro muito bom para aprender o protocolo HTTP e será muito útil para alguém implementação / estendendo-o.

Use as funções de soquete plataforma específica para encapsular o protocolo HTTP, assim como caras por trás Apache fez .

Há um duplicado com mais respostas .

Um candidato ainda não mencionada é SPServer .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top