Compilar um Servidor HTTP simples em C [fechado]
Preciso de construir um Servidor HTTP simples em C. alguma orientação? Links? Amostras?
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.
O que você tem que implementar em etapas incrementais é:
- 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).
- Implemente um leitor buffer para que possa ler os pedidos de uma linha (delimitada pelo CRLF) de cada vez. Leia a primeira linha. Analisar o método, a versão do pedido e a caminho.
- implementar o processamento do cabeçalho para a sintaxe" Header: value". Não se esqueça de desdobrar cabeçalhos dobrados.
- 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.
- implementar a descodificação do conteúdo com base no tipo de conteúdo.
- Se você vai suportar o HTTP 1.1, implemente coisas como" 100 Continue", mantenha-se vivo, transferência chunked. Adicionar robustez / medidas de segurança como detectar pedidos incompletos, limitar o número máximo de clientes, etc.
- encolher o seu código e abrir o código it:)
Mongoose (Anteriormente Servidor HTTP simples) é muito bom. Em particular, é incorporável e compila sob Windows, Windows CE e UNIX.
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.
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.
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
Você deve ser capaz de escolhê-lo e usar o código compatível com C.
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.
Usar as funções de 'socket' específicas da plataforma para encapsular o protocolo HTTP, tal como fizeram os tipos atrás do Apache .
Existe um duplicado com mais respostas .
Um candidato ainda não mencionado é spserver .