|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Avete mai scritto un web server in C ?
io partendo dagli esempi di questo link: http://unsecure.altervista.org/socket/socket.htm lo sto facendo, e da quel che ho capito, c'è un continuo scambio di GET(dammi questo, dammi quello) del client golosone, verso il server che gentilmente gli spara in bcca quanto richesto
Ma mi ri-chiedevo e lo faccio con esempio pratico; io invio una pagina HTML al client, ed il client mi risponde con questo messaggio: Codice:
GET /immagine1.jpg HTTP/1.1 Accept: */* Referer: http://127.0.0.1/ Accept-Language: it Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Host: 127.0.0.1 Connection: Keep-Alive Ultima modifica di misterx : 25-02-2006 alle 09:36. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Solitamente è il contrario... E' il client che guida il trasferimento...
GET /pippo.html -> si risponde inviando il file GET /pippo.gif -> si risponde inviando il file GET /pippo.jpg -> si risponde inviando il file .... Se i contenuti aggiuntivi (immagini ad esempio) della pagina HTML che invii al client ci potrà anche essere una richiesta per questi...ma non sono fatti correlati...ci potrebbe benissimo essere una richiesta solo per i contenuti aggiuntivi e non per la pagina (magari già in cache sul browser)... Ti consiglio comunque di leggerti la relativa RFC che sicuramente ti semplificherà anche la programmazione... Non stare ad implementare tutto il protocollo insieme, ma procedi a piccoli passi... |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
mi sembrava di aver scritto che è il client che continua a richiedere dati ed il server invia lui qanto richiesto, boh, magari ho scritto in una forma poco capibile.
L'RFC al quale tu ti tiferisci, ti spiega come funziona il protocollo sino al minimo dettaglio, ma non ti da indicazioni sulla programmazione in quanto poi, ognuno se lo implementa nel linguaggio che vuole. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#5 | ||
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Tu hai scritto questo:
Quote:
Non c'è una struttura predefinita...semplicemente ogni riga è un header che deve dare informazioni a te... Quote:
Basta implementare quello che ti dice lì è sei (quasi) sicuro che il tuo programma sia corretto... Ultima modifica di cionci : 25-02-2006 alle 10:04. |
||
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
ok, ho scritto in una forma poco comprensibile; il mio ritorna aveva il valore che: il client invia messaggi al server con le richieste, vabbè, soprassediamo, non è la forma espositiva che mi interessa Ad ogni modo, pensavo che il parsing potesse essere evitato. Se già qualcuno ha implementato in qualche modo l'HTTP, fornendomi lumi mi farebbe risparmiare tempo evitandomi di leggere tutto quell'RFC, documento del quale ero già a conoscenza. Oh, posso essere un pò pigro ? |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Il fatto è che l'RFC lo DEVI leggere...altrimenti non puoi implementare un server veramente funzionante...
Anche se ci fosse una libreria che ti risparmia il parsing degli header è pacifico che devi aggiungere le informazioni giuste allo stato della risposta per generare header coerenti con quelli della richiesta... Se non sai quali sono queste informazioni come fai ad andare avanti ? Il parsing degli header in questo caso è una ca@@ata... Ne hai uno per riga... Basta leggere fino ai ":" e hai il nome della direttiva...quello che resta è il valore... L'unica cosa che devi progettare bene è la struttura dati... Qui ci vedrei bene una bella gerarchia di oggetti Io ho implementato un server POP3 perfettamente funzionante...e per questo devo dire grazie solo alla RFC...senza non avrei avuto la ben che minima idea di come gestire certe situazioni... |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ah...ricorda che, durante lo sviluppo, la maggior parte degli header li puoi anche non considerare !!!
Ad esempio nel caso che hai postato te li puoi ignorare tutti !!! |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
volevo risparmiarmi un pò di fatica |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
avevo provato, ovviamente dal lato server, ad inviare solo codice HTML al client senza alcun header, ma non funzionava. Stamattina ho eliminato l'header e funziona lo stesso, boh per intenderci: Codice:
HTTP/1.0 200 OK Date: Mon, 28 Jun 2004 10:47:31 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 X-Powered-By: PHP/4.3.4 Vary: Accept-Encoding,Cookie Cache-Control: private, s-maxage=0, max-age=0, must-revalidate Content-Language: it Content-Type: text/html; charset=utf-8 Age: 7673 X-Cache: HIT from wikipedia.org Connection: close <HTML> [ ...] Ultima modifica di misterx : 25-02-2006 alle 11:10. |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ti passo un dispensa di un mio prof...magari ti risulta più semplice da leggere rispetto alla RFC...
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
http://info.iet.unipi.it/~marco/tia/http.pdf
Ci sono alcune cose "minime" che devono essere contenute nella risposta...come il Content-type e il Content-lenght... |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
pensa che io ho provato ad omettere le informazioni "minime" da te citate e il protocollo funziona lo stesso; non so fino a che punto però. Il Content-lenght dovrebbe riferisi al "payload"(dati veri e propri) e che dovrebbe coincidere con la dimensione del file che si sta per trasmettere e la sua unità di misura mi è parso di capire che dovrebbe essere il byte. Ultima modifica di misterx : 25-02-2006 alle 12:29. |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:49.



















