Domanda

Devo creare un semplice server HTTP in C. Qualche consiglio? Link? I campioni?

È stato utile?

Soluzione

Ti suggerisco di dare un'occhiata a piccolo httpd . Se vuoi scriverlo da zero, allora dovresti approfondire leggere RFC 2616 . Utilizza socket BSD per accedere alla rete a un livello molto basso.

Altri suggerimenti

Ti consiglio di dare un'occhiata a: Una guida pratica alla scrittura di client e server

Quello che devi implementare in passaggi incrementali è:

  1. Esegui il tuo layer socket TCP di base (ascolta su porte / porte, accetta connessioni client e invia / ricevi dati).
  2. Implementa un lettore con buffer in modo da poter leggere le richieste una riga (delimitata da CRLF) alla volta.
  3. Leggi la prima riga. Analizzare il metodo, la versione della richiesta e il percorso.
  4. Implementa l'analisi dell'intestazione per " Header: value " sintassi. Non dimenticare di aprire le intestazioni piegate.
  5. Controlla il metodo di richiesta, il tipo di contenuto e la dimensione del contenuto per determinare come / se il corpo verrà letto.
  6. Implementa la decodifica del contenuto in base al tipo di contenuto.
  7. Se hai intenzione di supportare HTTP 1.1, implementa cose come " 100 Continua " ;, keep-alive, trasferimento chunked.
  8. Aggiungi misure di robustezza / sicurezza come rilevare richieste incomplete, limitare il numero massimo di clienti ecc.
  9. Riduci a capo il tuo codice e open-source :)

Un server HTTP è concettualmente semplice:

  • Apri la porta 80 per l'ascolto
  • Quando viene stabilito il contatto, raccogli un po 'di informazioni (ottieni principalmente - per ora puoi ignorare il resto)
  • Traduci la richiesta in una richiesta di file
  • Apri il file e rispediscilo al client

Diventa più difficile a seconda della quantità di HTTP che vuoi supportare: il POST è un po 'più complicato, gli script, la gestione di richieste multiple, ecc.

Ma la base è molto semplice.

Mongoose (precedentemente semplice daemon HTTP) è abbastanza buono. In particolare, è integrabile e può essere compilato su Windows, Windows CE e UNIX.

Apri un socket TCP sulla porta 80, inizia ad ascoltare nuove connessioni, implementa this . A seconda dei tuoi scopi, puoi ignorare quasi tutto. Nella migliore delle ipotesi, è possibile inviare la stessa risposta per ogni richiesta, che implica solo la scrittura di testo nel socket.

Guarda nweb (Nigel's Web Server), "un server Web minuscolo e sicuro [...] con solo 200 righe di codice sorgente C":

https://drive.google.com/file/d/ 0B3msld7qnNOhN1NXaFIwSFU2Mjg / vista? USP = condivisione http://www.ibm.com/developerworks/systems/library / ES-nWeb /

L'articolo include pseudocodice, spiegazioni e commenti.

EDIT: il link IBM è morto. Ho salvato un PDF della pagina Web su Google Drive. Ecco il download del codice:

https://drive.google.com/file/d/ 0B3msld7qnNOhSGZGdDJJMmY0VHM / vista? USP = condivisione

@ ankushagarwal ha apportato alcune modifiche e ha caricato la sua versione su GitHub: https://github.com/ankushagarwal/nweb

Ho scritto il mio che puoi usare. Questo funziona con sqlite, è thread-safe ed è in C ++ per UNIX.

Dovresti essere in grado di separarlo e utilizzare il codice compatibile C.

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

Le Specifiche HTTP e Firebug sono stati molto utili per me quando ho dovuto farlo per i miei compiti.

Buona fortuna con i tuoi. :)

Suggerirei di guardare la fonte a qualcosa come lighthttpd .

http://www.manning.com/hethmon/ - " Guida illustrata a HTTP di Paul S. Hethmon " da Manning è un ottimo libro per imparare il protocollo HTTP e sarà molto utile per qualcuno che lo implementa / lo estende.

Utilizza le funzioni socket specifiche della piattaforma per incapsulare il protocollo HTTP, proprio come hanno fatto i ragazzi dietro Apache .

Esiste un duplicato con più risposte .

Un candidato non ancora menzionato è spserver .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top