[ english | italian ]

SHTTPD (Simple HTTPD)

Descrizione

SHTTPD è un web server molto leggero. Gli obiettivi principali sono la facilita' di uso e la posibilita' di embed. Ideale per uso personale, demo di software web-based (come PHP, Perl ecc), veloce condivisione di file. Degli accorgimenti sono stati presi per rendere il codice sicuro. SHTTPD è sotto i termini della licenza MIT. Non leggere piu'! Scaricalo e provalo!

SHTTP system tray icon

Caratteristiche

SHTTPD settings page

Caratteristiche che NON ci sono (e probabilmente non ci saranno mai)

Stand-alone server

Compilazione

Compilare e' facile. Tutto il sorgente è in un file .c. Nessun file di configurazione e nessun makefile sono necessari.

*BSD, MacOSX cc -o shttpd shttpd.c
Linux cc -o shttpd shttpd.c -ldl
Windows cl shttpd.c (MS VC)
QNX cc -o shttpd shttpd.c -lsocket
Solaris cc -o shttpd shttpd.c -lsocket -lnsl

Flag opzionali per la compilazione

-DNO_GUI Disabilita il supporto per il GUI in Windows
-DNO_CGI Disabilita il supporto CGI. Rimuove attorno ai 4K di codice
-DIO_MAX=16384 Grandezza HTTP massima richiesta (default impostato su 32K)
-DNO_SOCKLEN_T Must be used on platforms where socklen_t type is not defined. Few to name are Windows, and Darwin prior to 7.0....Deve essere usato sulle piattaforme in cui il tipo del socklen_t non è definito. Pochi al nome sono Windows e Darwin prima di 7.0
-DCONFIG=\"/etc/shttpd.conf\" Percorso del file Config (di default è "shttpd.conf")

Uso

Sotto WIndows, tutto ciò che devi fare è eseguire shttpd.exe - nessuna installazione la configurazione però è richiesta. SHTTPD creerà un icona nel vassoio di sistema (system tray), da cui puoi anche fermare SHTTPD o cambiare qualsiasi opzione. Se tu pensi di usare CGI - per esempio, perl, PHP, python o altri - una buona idea sarebbe quella di collegare il percorso dell'interprete alla variabile di ambiente del sistema (il PATH). Per esempio, se PHP è installato su C:\php, aggiungi questo al Path, e allora potete usare

#!php-cgi
nel vostro script PHP.

Ci sono due modi per settare i parametri per SHTTPD: attraverso la linea di comando o tramite il file config. Solitamente, l'unica cosa che bisogna settare è il percorso della cartella radice WWW (WWW root directory). Se non specificata, la cartella in cui SHTTPD è lanciato è usata come WWW root. Cosi' fai un

% shttpd -d /var/www

quando lanci SHTTPD dalla linea di comando, o usi il file shttpd.conf

document_root C:\wwwroot
e allora lancia SHTTPD. Tutte le opzioni di configurazione e il corrispettivi switch per la linea di comando sono descritti nel SHTTPD manual page

Embedding SHTTPD in applicazioni esistenti

Due file sono richiesti per fare questo: shttpd.c e shttpd.h (file header contenente le API embedded). Entrambi posso essere trovati nel source package (pacchetto sorgenti). shttpd.c deve essere compilato insieme all'applicazione, con il flag -DEMBEDDED settato:

% cc myprogram.c shttpd.c -DEMBEDDED

Il source package contiene diversi esempi:

example.c
Questo esempio apre la porta 9000 and This example opens port 9000 ed esegue le richieste su di esso. Esso mostra la variabile del programma all'utente, e permette all'utente di cambiare il valore di questa variabile interna. Mostra come mandare e ricevere grandi volumi di dati al browser. Infine mostra come proteggere certe pagine web con la password.
scalable.c
Questo esempio è scritto per l'ambiente Win32 e mostra come usare SHTTPD in modo scalabile. ***The example spawns a pool of threads, having one SHTTPD context per thread, and load balances the incoming connections between threads.***
example_nt_service.cpp
Questo esempio è contributo di Makc (makc.the.great at gmail dot com). Esso mostra, come fare un web-gui per i servizi Windows. O, esprimendosi in modo diverso, come far diventare SHTTPD un servizio Windows.

Issues I came across

  1. Compilando per Linux embedded, ARM + uclibc non funziona.  Ciò è dovuto al bug dell'implementazione di sscanf() e snprintf funzioni stdio in uClibc. Per rimediare, usa l'implementazione alternativa di queste funzioni, come le Trio, scritte da Daniel Stenberg. Tu hai bisogno di ri- #define snprintf a trio_snrpintf, sscanf a trio_sscanf. La linea di compilazione allora sarebbe
    arm-elf-gcc -o shttpd shttpd.c trio.c triostr.c
    È stato segnalato che altri piccoli webservers non funzionano ugualmente una volta compilati contro uClibc per ARM. le difficoltà di sscanf() potrebbero contribuire a richiamare quel problema. 
  2. Esecuzione di CGI sotto Windows. Una volta ho fatto funzionare uno script CGI in Perl sotto SHTTPD. Supponiamo che questo script connette ad un database MySQL e mostri alcuni dati. Io ho ottenuto questo errore:
    Can't create TCP/IP socket (10106)
    Lo stesso errore l'ho ricevuto eseguendo uno script PHP simile:
    mysql_connect(): Can't create TCP/IP socket (10106)
    Dopo ore di debugging ho realizzato che il server web (in questo caso SHTTPD) deve passare la variabile d'ambiente SYSTEMROOT al processo CGI figlio, a meno che il processo figlio non possa fare operazioni sul socket. I suppongo che questa è un altra divertente caratteristica da Microsoft.

Links

Ringraziamenti

Autore

Copyright © di Sergey Lyubka (shttpd-general at lists dot sourceforge dot net). Ritieniti libero di mandarmi una lettera se hai qualsiasi domanda! Inoltre, potete mantenermi felice riducendo la mia lista dei desideri dei libri.

Tradotto da SuM90 (sum90 AT libero DOT it) e rivisitato da klyvya