Prova comandi http
I servizi TCP/IP (5 livello iso/osi) si fondano sullo scambio di comandi testuali tra client e server. I programmi client (come firefox, outlook, opera, chrome...) forniscono un'interfaccia grafica che semplifica la vita all'utente finale evitando la digitazione diretta di comandi complessi che il server interpreta ed esegue. Vediamo la dimostrazione di quanto affermato applicata al protocollo di servizio HTTP.
Test HTTP mediante TELNET
Usiamo per il nostro esempio il sito
www.brescianet.com.
Prima di tutto identifichiamo l'indirizzo IP del sito www.brescianet.com.
In una finestra DOS digitiamo il comando
ping www.brescianet.com e analizziamo la
risposta.
E:\Users\Administrator>ping
www.brescianet.com Esecuzione di Ping www.brescianet.com [62.149.130.28] con 32 byte di dati: Risposta da 62.149.130.28: byte=32 durata=89ms TTL=119 Risposta da 62.149.130.28: byte=32 durata=47ms TTL=119 Risposta da 62.149.130.28: byte=32 durata=52ms TTL=119 Risposta da 62.149.130.28: byte=32 durata=50ms TTL=119 Statistiche Ping per 62.149.130.28: Pacchetti: Trasmessi = 4, Ricevuti = 4, Persi = 0 (0% persi), Tempo approssimativo percorsi andata/ritorno in millisecondi: Minimo = 47ms, Massimo = 89ms, Medio = 59ms |
L'IP che cerchiamo è quindi: 62.149.130.28. Apriamo adesso Internet Explorer e digitiamo sulla barra degli indirizzi http://62.149.130.28 . Il browser dovrebbe visualizzare la pagina in figura indicante lo status del server "multisito" [un solo IP n domini] che ospita "www.brescianet.com"
Apriamo adesso una finestra DOS e digitiamo:
Telnet 62.149.130.28 80
La finestra a questo punto si pulisce.
Digitiamo quindi (rispettando il maiuscolo e il minuscolo):
GET / HTTP/1.1
e battiamo invio (a video non si vede il testo che abbiamo battuto!). Scriviamo
poi:
Host:
62.149.130.28
E:\Users\Administrator>telnet
62.149.130.28 80 ... il monitor su pulisce ... il testo in giallo non viene visualizzato ... GET / HTTP/1.1<invio> Host: 62.149.130.28<invio> <invio> HTTP/1.1 200 OK Cache-Control: public Date: Sun, 31 Jan 2010 17:35:24 GMT Content-Length: 134 Content-Type: text/html; charset=utf-8 Expires: Sun, 31 Jan 2010 17:35:25 GMT Last-Modified: Sun, 31 Jan 2010 17:35:24 GMT Server: Microsoft-IIS/6.0 X-AspNet-Version: 2.0.50727 MicrosoftOfficeWebServer: 5.0_Pub X-Powered-By: ASP.NET <html><head><title>Server Status</title></head><body><h2>62.149.130.28</h2><br><h2>Server Status:</h2><h3>Server Up</h3></body></html> |
La sequenza a video rappresenta la risposta [HTTP Response Headers] del WEB server (IIS della microsoft versione 6.0 nel nostro esempio) che eroga le pagine di www.brescianet.com. Vediamo di analizzare la parte di risposta contenente i tag HTML. Copiamo quindi nel blocco note la sequenza evidenziata in giallo e salviamola nel file pioppo.htm (basta pippo!!!).
Apriamo di seguito il file appena creato con Internet
Explorer. Come si può notare si tratta della stessa pagina che si era ricevuta
scrivendo l'indirizzo http://62.149.130.28.
In realtà la sequenza di comandi digitata inizialmente corrisponde alla sequenza
di comandi [HTTP Request Headers] inviata dal client al Web Server quando
l'utente ha richiesto la pagina http://62.149.130.28.
Vdiamo un esempio analogo di HTTP Request mediante Telnet. Rispetto al
precedente differisce solo per aver sostituito, nell'header tag
Host,
l'indirizzo IP reale con il nome effettivo del sito. La pagina HTML ricevuta questa volta
corrisponde alla vera homepage del sito www.brescianet.com. Questo esempio
evidenzia
come il provider di brescianet.com (Aruba) riesce a gestire con un unico IP più
siti sulla stessa macchina: sfrutta l'header
Host per
capire la pagina da inviare al client.
E:\Users\Administrator>telnet
www.brescianet.com 80 .. il monitor su pulisce ... il testo in giallo non viene visualizzato ... GET / HTTP/1.1<invio> Host: www.brescianet.com<invio> <invio> HTTP/1.1 200 OK Date: Sun, 31 Jan 2010 21:33:23 GMT Content-Length: 1365 Content-Type: text/html Content-Location: http://www.brescianet.com/index.htm Last-Modified: Tue, 11 Aug 2009 09:13:31 GMT Accept-Ranges: bytes ETag: "601eb4fe631aca1:8a506" Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET MicrosoftOfficeWebServer: 5.0_Pub <html> <head> <meta name="verify-v1" content="VVvE/ONgxck8aoKG/k1JkqCqxORatydyR5KhDj85S0Y=" /> <title>Appunti di INFORMATICA - Prof. Marco SECHI</title> </head> <FRAMESET rows='17,19,*' frameborder="0" framespacing="0" BORDER=OFF> <FRAMESET cols='*,120' BORDER=OFF> <FRAME SRC=TITOLO.HTM NAME=Titolo marginwidth=0 marginheight=0 SCROLLING=NO NORESIZE> <FRAME SRC=webappl/CONTA.ASP NAME=Conta marginwidth=0 marginheight=0 SCROLLING=NO NORESIZE> </FRAMESET> <frame name="bottoni" scrolling="no" noresize src="menuh.htm" marginwidth="4" marginheight="4" > <FRAMESET cols='170,*' BORDER=OFF id=FramesDati> <FRAMESET rows='*,180,127' BORDER=OFF id=FramesAdv> <FRAME SRC=menu_main.htm NAME=Elenco marginwidth=0 marginheight=0 SCROLLING=AUTO target="principale" > <FRAME SRC=registroprofe/advregistro.htm NAME=ADVREG marginwidth=0 marginheight=0 SCROLLING=NO target="principale" > <FRAME SRC=NEWS.HTM NAME=News marginwidth=0 marginheight=0 SCROLLING=NO target="principale" > </FRAMESET> <FRAME SRC=home.htm NAME=contenuto marginwidth=5 marginheight=5 SCROLLING=AUTO> </FRAMESET> <noframes> <body> <p>La pagina corrente utilizza i frame. Questa caratteristica non è supportata dal browser in uso.</p> </body> </noframes> </FRAMESET> </html> |
HTTP HEADERS
Vediamo ora di analizzare il significato delle operazioni appena condotte. La comunicazione tra server e client HTTP è basata sullo scambio di messaggi testuali tipicamente indicati come HTTP Request e HTTP Response. All'interno di questi due tipi di comandi abbiamo gli HTTP headers che sono delle informazioni addizionali che accompagnano sia le richieste HTTP che le risposte HTTP.
Gli HTTP headers forniscono importanti informazioni per la navigazione. Per esempio l'HTTP header permette al browser di conoscere la lunghezza e il tipo relativi ai documenti da visualizzare. Permettono inoltre la gestione dell'accesso, mediante login (user e password), alle pagine sicure
Alcune informazioni che possono essere trovate negli HTTP headers sono
evidenziate in seguito:
-
User authentication
-
Data type
-
Data length
-
Cookies
HTTP Request Headers
Gli HTTP request headers sono spediti come parte di una
HTTP Request.
Questi headers definiscono in dettaglio la richiesta da fare al Web server. Abbiamo
la GET request che è composta interamente da headers mentre la POST request contiene
un blocco extra di dati, posti immediatamente dopo gli headers, che contengono gli
argomenti postati nel form.
Esempio: HTTP request headers corrispondente all'URL
http://www.brescianet.com/pioppo/conta.php
GET /pioppo/conta.php
HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash,
*/*
Referer: http://www.brescianet.com/pioppo/
Accept-Language: en-us
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR
1.1.4322; .NET CLR 2.0.50727)
Host: www.brescianet.com
Connection: Keep-Alive
In dettaglio le HTTP request sono composte da due parti:
- la prima linea che identifica il tipo di richiesta (GET, POST, HEAD [vedi
pag.24 del rcf2616] ) e la versione HTTP utilizzata
- le linee
successive contenenti gli headers veri e propri la cui struttura può differire leggermente a
seconda del tipo di richiesta. Queste linee sono suddivise in due parti
mediante i "due punti :".
Gli headers sono seguiti da una linea bianca. Se l'HTTP request è un
POST, a
qualsiasi dato postato segue una linea bianca. Qualora non vi siano dati
postati, come ad esempio nelle GET Request, la linea bianca è comunque
richiesta.
Ad ogni HTTP Request prodotta da un Browser dovrebbe corrispondere sempre una HTTP Response redatta dal WEB Server.
HTTP Response Headers
Quando un WEB server risponde a una HTTP Request, spedisce al client
un HTTP Response Headers. L'HTTP Response Headers è molto simile all'HTTP request headers
Esempio di HTTP Response Headers
HTTP/1.1 200 OK
Date: Sun, 02 Jul 2006 22:28:58 GMT
Server: Apache/2.0.40 (Red Hat Linux)
Last-Modified: Sat, 29 Jan 2005 04:13:19 GMT
ETag: "824319-509-c6d5c0"
Accept-Ranges: bytes
Content-Length: 1289
Connection: close
Content-Type: text/html
La prima linea è delimitata mediante lo spazio. e contiene lo status della risposta e la versione HTTP utilizzata. Lo status code 200 indica che la richiesta è OK e non si è verificato alcun errore. Un altro valore possibile potrebbe essere 404 (page not found) che corrisponde al non aver trovato sul Web Server la pagina richiesta.
Gli errori sono raggruppati in base alla cifra corrispondente alle centinaia ed esattamente:
1xx: Informativa - la richiesta è stata ricevuta ed
è possibile continuare il processo
100:
Continue
101: Switching Protocols
2xx: OK - la richiesta è stata ricevuta, elaborata e accettata
200:
OK
201: Created
202: Accepted
203: Non-Authoritative Information
204: No Content
205: Reset Content
206: Partial Content
207: Multi-Status
3xx: Ridirezione - ulteriori azioni devono essere intraprese al
fine di concludere la richiesta
300:
Multiple Choices
301: Moved Permanently
This and all future requests should be directed to another URL.
302: Found
This is the most popular redirect code, but also an example of industrial
practice contradicting the standard. HTTP/1.0 specification (RFC 1945)
required the client to perform temporary redirect (the original describing
phrase was "Moved Temporarily"), but popular browsers implemented it
as a 303 See Other. Therefore, HTTP/1.1 added status codes 303 and 307 to
disambiguate between the two behaviors. However, majority of
Web applications and frameworks still use the 302 status code as if it were the
303.
303: See Other (since HTTP/1.1)
The response to the request can be found under another URL using a GET method.
304: Not Modified
305: Use Proxy (since HTTP/1.1)
Many HTTP clients (such as Mozilla and Internet Explorer) don't correctly handle
responses with this status code.
306 is no longer used, but reserved.
Was used for 'Switch Proxy'.
307: Temporary Redirect (since
HTTP/1.1)
4xx: Errore sul Client: la richiesta contiene degli errori
sintattici oppure non può essere completata per qualche motivo
400:
Bad Request
401: Unauthorized
Similar to 403/Forbidden, but specifically for use when authentication is
possible but has failed or not yet been provided. See basic authentication
scheme and digest access authentication.
402: Payment Required
The original intention was that this code might be used as part of some form of
digital cash/micropayment scheme, but that has never eventuated, and thus this
code has never been used.
403: Forbidden
404: Not Found
405: Method Not Allowed
406: Not Acceptable
407: Proxy Authentication Required
408: Request Timeout
409: Conflict
410: Gone
411: Length Required
412: Precondition Failed
413: Request Entity Too Large
414: Request-URL Too Long
415: Unsupported Media Type
416: Requested Range Not Satisfiable
417: Expectation Failed
449: Retry With
5xx; Errore sul Server: il server fallisce nell'esaudire la richiesta
nonostante la richiesta sia corretta nella forma.
500: Internal Server Error
501: Not Implemented
502: Bad Gateway
503: Service Unavailable
504: Gateway Timeout
505: HTTP Version Not Supported
509: Bandwidth Limit Exceeded
Dopo la parte relativa agli header, dopo una linea bianca, seguono i dati
relativi alla pagina richiesta e che nell'esempio hanno una lunghezza di 1.289 bytes come indicato negli headers
tag:
Accept-Ranges
e
Content-Length.