Crea un semplice server HTTP in C [chiuso]


105

Ho bisogno di costruire un semplice server HTTP in C. Qualche consiglio? Link? Campioni?


1
Questo è esattamente quello che pensavo
Rik

1
Ora ho anche avuto lo stesso problema. Ho usato questo collegamento . Spero che questo possa aiutare anche te.
Udara SS Liyanage

1
che ne dici delle FAQ su come porre una domanda. dovresti sapere dopo 3K in rep che questa non è una vera domanda, come può ottenere così tanti voti positivi?


1
Questa è apparentemente una domanda molto utile. Perché è chiuso?
McBear Holden

Risposte:



119

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

Quello che devi implementare in passaggi incrementali è:

  1. Ottieni il tuo livello di socket TCP di base in esecuzione (ascolta su porte / porte, accetta connessioni client e invia / ricevi dati).
  2. Implementa un lettore bufferizzato in modo da poter leggere le richieste una riga (delimitata da CRLF) alla volta.
  3. Leggi la prima riga. Analizza il metodo, la versione della richiesta e il percorso.
  4. Implementare l'analisi dell'intestazione per la sintassi "Intestazione: valore". 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. Implementare la decodifica del contenuto in base al tipo di contenuto.
  7. Se vuoi supportare HTTP 1.1, implementa cose come "100 Continue", keep-alive, chunked transfer.
  8. Aggiungi misure di robustezza / sicurezza come il rilevamento di richieste incomplete, la limitazione del numero massimo di client ecc.
  9. Restringi il tuo codice e rendilo open source :)

Punto 9, soprattutto dopo aver pubblicato una domanda qui, +1 :)
Matthieu

26

Un server HTTP è concettualmente semplice:

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

Diventa più difficile a seconda della quantità di HTTP che si desidera supportare: POST è un po 'più complicato, script, gestione di più richieste, ecc.

Ma la base è molto semplice.


25

Mongoose (Formerly Simple HTTP Daemon) è abbastanza buono. In particolare, è incorporabile e si compila sotto Windows, Windows CE e UNIX.


12

Aprire un socket TCP sulla porta 80, iniziare ad ascoltare per le nuove connessioni, implementare questo . A seconda dei tuoi scopi, puoi ignorare quasi tutto. Nel modo più semplice, puoi inviare la stessa risposta per ogni richiesta, che implica solo la scrittura di testo nel socket.


11

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

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

L'articolo include pseudocodice, spiegazioni e commenti.

EDIT: il collegamento di IBM è morto. Ho salvato un PDF della pagina web su Google Drive. Ecco il codice da scaricare:

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

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


Eh ho votato senza controllare il link: / Sto cercando la cosa esatta che hai menzionato, se trovi qualcosa mi puoi pingare? Txt
samayo

1
Il collegamento di @samayo IBM è morto. Ho fornito alcuni specchi.
XP1

Ecco un mirror di archive.org - che si spera sarà disponibile negli anni a venire: web.archive.org/web/20140905115151/http://www.ibm.com/…
james246





1

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


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.