Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Guida alle reti software e internet parte 2, Appunti di Elementi di Informatica

Guida alle reti parte 2 - storia ed evoluzione delle reti internet e software

Tipologia: Appunti

2018/2019

Caricato il 17/09/2019

paola_dellagiov_81
paola_dellagiov_81 🇮🇹

4.6

(7)

17 documenti

1 / 168

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
appunti del corso di
Sistemi di elaborazione: Reti II
prof. G. Bongiovanni
1 Premessa............................................................................................ 3
1 1) Il World Wide Web......................................................................... 4
1.1 1.1) Architettura client-server del Web............................................. 5
1.1.1 1.1.1) Client....................................................................................... 5
1.1.2 1.1.2) Server...................................................................................... 6
1.2 1.2) Standard utilizzati nel Web......................................................... 8
1.2.1 1.2.1) URL.......................................................................................... 8
1.2.2 1.2.2) Linguaggio HTML.................................................................... 10
1.2.3 1.2.3) Il protocollo HTTP................................................................... 14
1.3 1.3) Estensioni del Web...................................................................... 22
1.3.1 1.3.1) Estensione per mezzo delle form............................................. 22
1.3.2 1.3.2) Common Gateway Interface.................................................... 26
1.3.3 1.3.3) Linguaggio JavaScript (già LiveScript)................................... 33
1.3.4 1.3.4) Linguaggio Java....................................................................... 37
1.4 1.4) I problemi del Web...................................................................... 41
2 2) La sicurezza................................................................................... 43
2.1 2.1) Controllo dei diritti di accesso.................................................... 43
2.1.1 2.1.1) Basic authentication in HTTP 1.0............................................ 43
2.1.2 2.1.2) Digest authentication in HTTP 1.1.......................................... 44
2.1.3 2.1.3) Firewall.................................................................................... 45
2.2 2.2) Protezione delle risorse da danneggiamento............................. 47
2.2.1 2.2.1) La sicurezza e le estensioni del Web....................................... 48
2.2.2 2.2.2) La sicurezza e Java.................................................................. 49
2.3 2.3) Protezione delle informazioni durante il transito sulla rete....... 50
2.3.1 2.3.1) Crittograa.............................................................................. 51
2.3.1.1 2.3.1.1) Crittograa a chiave segreta (o simmetrica).............. 54
2.3.1.2 2.3.1.2) Crittograa a chiave pubblica..................................... 56
2.3.2 2.3.2) Funzioni hash e rme digitali.................................................. 59
2.3.3 2.3.3) Protocolli crittograci.............................................................. 61
2.3.3.1 2.3.3.1) Chiave segreta di sessione.......................................... 62
2.3.3.2 2.3.3.2) Centro di distribuzione delle chiavi............................ 63
2.3.3.3 2.3.3.3) Secure Socket Layer e Secure-HTTP.......................... 65
3 3) Utilizzo di Java per lo sviluppo di applicazioni di rete.................. 66
3.1 3.1) Ripasso di AWT........................................................................... 67
3.2 3.2) Input/Output in Java................................................................... 71
3.2.1 3.2.1) Classe InputStream................................................................. 72
3.2.2 3.2.2) Classe OutputStream............................................................... 73
3.2.3 3.2.3) Estensione della funzionalità degli Stream............................. 75
3.2.3.1 3.2.3.1) Classe FilterInputStream............................................ 76
3.2.3.2 3.2.3.2) Classe FilterOutputStream......................................... 76
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Anteprima parziale del testo

Scarica Guida alle reti software e internet parte 2 e più Appunti in PDF di Elementi di Informatica solo su Docsity!

appunti del corso di

Sistemi di elaborazione: Reti II

  • 1 Premessa............................................................................................ prof. G. Bongiovanni
  • 1 1) Il World Wide Web.........................................................................
  • 1.1 1.1) Architettura client-server del Web.............................................
  • 1.1.1 1.1.1) Client.......................................................................................
  • 1.1.2 1.1.2) Server......................................................................................
  • 1.2 1.2) Standard utilizzati nel Web.........................................................
  • 1.2.1 1.2.1) URL..........................................................................................
  • 1.2.2 1.2.2) Linguaggio HTML....................................................................
  • 1.2.3 1.2.3) Il protocollo HTTP...................................................................
  • 1.3 1.3) Estensioni del Web......................................................................
  • 1.3.1 1.3.1) Estensione per mezzo delle form.............................................
  • 1.3.2 1.3.2) Common Gateway Interface....................................................
  • 1.3.3 1.3.3) Linguaggio JavaScript (già LiveScript)...................................
  • 1.3.4 1.3.4) Linguaggio Java.......................................................................
  • 1.4 1.4) I problemi del Web......................................................................
  • 2 2) La sicurezza...................................................................................
  • 2.1 2.1) Controllo dei diritti di accesso....................................................
  • 2.1.1 2.1.1) Basic authentication in HTTP 1.0............................................
  • 2.1.2 2.1.2) Digest authentication in HTTP 1.1..........................................
  • 2.1.3 2.1.3) Firewall....................................................................................
  • 2.2 2.2) Protezione delle risorse da danneggiamento.............................
  • 2.2.1 2.2.1) La sicurezza e le estensioni del Web.......................................
  • 2.2.2 2.2.2) La sicurezza e Java..................................................................
  • 2.3 2.3) Protezione delle informazioni durante il transito sulla rete.......
  • 2.3.1 2.3.1) Crittografia..............................................................................
  • 2.3.1.1 2.3.1.1) Crittografia a chiave segreta (o simmetrica)..............
  • 2.3.1.2 2.3.1.2) Crittografia a chiave pubblica.....................................
  • 2.3.2 2.3.2) Funzioni hash e firme digitali..................................................
  • 2.3.3 2.3.3) Protocolli crittografici..............................................................
  • 2.3.3.1 2.3.3.1) Chiave segreta di sessione..........................................
  • 2.3.3.2 2.3.3.2) Centro di distribuzione delle chiavi............................
  • 2.3.3.3 2.3.3.3) Secure Socket Layer e Secure-HTTP..........................
  • 3 3) Utilizzo di Java per lo sviluppo di applicazioni di rete..................
  • 3.1 3.1) Ripasso di AWT...........................................................................
  • 3.2 3.2) Input/Output in Java...................................................................
  • 3.2.1 3.2.1) Classe InputStream.................................................................
  • 3.2.2 3.2.2) Classe OutputStream...............................................................
  • 3.2.3 3.2.3) Estensione della funzionalità degli Stream.............................
  • 3.2.3.1 3.2.3.1) Classe FilterInputStream............................................
  • 3.2.3.2 3.2.3.2) Classe FilterOutputStream.........................................
  • 3.2.3.3 3.2.3.3) BufferedInputStream e BufferedOutputStream..........
  • 3.2.3.4 3.2.3.4) DataInputStream e DataOutputStream......................
  • 3.2.3.5 3.2.3.5) PrintStream.................................................................
  • 3.2.3.6 3.2.3.6) Esempi di uso degli stream di filtro............................
  • 3.2.4 3.2.4) Tipi base di Stream..................................................................
  • 3.2.5 3.2.5) Stream per accesso a file.........................................................
  • 3.2.6 3.2.6) Stream per accesso alla memoria............................................
  • 3.2.7 3.2.7) Stream per accesso a connessioni di rete...............................
  • 3.2.7.1 3.2.7.1) Classe Socket..............................................................
  • 3.2.7.2 3.2.7.2) Classe ServerSocket....................................................
  • 3.3 3.3) Multithreading............................................................................
  • 3.3.1 3.3.1) Classe Thread..........................................................................
  • 3.3.2 3.3.2) Interfaccia Runnable...............................................................
  • 3.4 3.4 Sincronizzazione..........................................................................
  • 3.4.1 3.4.1) Metodi sincronizzati................................................................
  • 3.4.2 3.4.2) Istruzioni sincronizzate...........................................................
  • 3.4.3 3.4.3) Wait() e Notify().......................................................................
  • 4 4) Utilizzo dei messaggi.....................................................................
  • 4.1 4.1) Classi di base per la gestione di messaggi.................................
  • 4.1.1 4.1.1) Classe MessageOutput............................................................
  • 4.1.2 4.1.2) Classe MessageInput...............................................................
  • 4.1.3 4.1.3) Classe MessageOutputStream.................................................
  • 4.1.4 4.1.4) Classe MessageInputStream...................................................
  • 4.2 4.2) Un'applicazione client-server per la gestione di transazioni.....
  • 4.2.1 4.2.1) Classe TransactionClient.........................................................
  • 4.2.2 4.2.2) Classe TransactionServer........................................................
  • 4.3 4.3) Accodamento di messaggi..........................................................
  • 4.3.1 4.3.1) Classe Queue...........................................................................
  • 4.3.2 4.3.2) Classe QueueOutputStream....................................................
  • 4.3.3 4.3.3) Classe QueueInputStream
  • 4.3.4 4.3.4) Utilizzo tipico degli stream per l'accodamento di messaggi...
  • 4.4 4.4) Multiplexing di messaggi............................................................
  • 4.4.1 4.4.1) Classe MultiplexOutputStream...............................................
  • 4.4.2 4.4.2) Classe MultiplexInputStream..................................................
  • 4.4.3 4.4.3) Classe Demultiplexer...............................................................
  • 4.4.4 4.4.4) Classe DeliveryOutputStream e Interfaccia Recipient............
  • 4.4.4.1 4.4.4.1) Classe DeliveryOutputStream.....................................
  • 4.4.4.2 4.4.4.2) Interfaccia Recipient...................................................
  • 4.4.5 4.4.5) Client per la chatline grafica e testuale..................................
  • 4.4.5.1 4.4.5.1) Classe CollabTool........................................................
  • 4.4.5.2 4.4.5.2) Classe ChatBoard........................................................
  • 4.4.5.3 4.4.5.3) Classe WhiteBoard......................................................
  • 4.4.6 4.4.6) Server per la chatline grafica e testuale.................................
  • 4.5 4.5) Ulteriori estensioni di funzionalità tramite messaggi................

1) Il World Wide Web

Il World Wide Web (detto anche Web , WWW o W 3 )^ è nato al Cern nel 1989 per

consentire una agevole cooperazione fra i gruppi di ricerca di fisica sparsi nel mondo.

E' un'architettura software volta a fornire l'accesso e la navigazione a un enorme insieme di documenti collegati fra loro e sparsi su milioni di elaboratori.

Tale insieme di documenti forma un ipertesto^ ( hypertext^ ), cioè un testo che viene percorso in modo non lineare. Il concetto di ipertesto risale alla fine degli anni '40, e si deve a vari scienziati: Vannevar Bush (sistema Memex, basato su microfilm); Douglas Engelbart (sistema NLS/Augment, basato su elaboratori interconnessi); Ted Nelson (sistema Xanadu, con enfasi sulla tutela dei diritti d'autore: un documento poteva contenere un riferimento ad altri documenti, che venivano inclusi "al volo" in quello referente e mantenevano così la loro unicità e originalità).

Il Web ha diverse caratteristiche che hanno contribuito al suo enorme successo: architettura di tipo client-server: ampia scalabilità; adatta ad ambienti di rete; architettura distribuita: perfettamente in linea con le esigenze di gestione di un ipertesto; architettura basata su standard di pubblico dominio: possibilità per chiunque di proporre una implementazione; uguali possibilità di accesso per tutte le piattaforme di calcolo; capacità di gestire informazioni di diverso tipo (testo, immagini, suoni, filmati, realtà virtuale, ecc.): grande interesse da parte di tutti gli utenti.

I documenti che costituiscono l'ipertesto gestito dal Web sono detti pagine web , e possono contenere, oltre a normale testo formattato, anche: rimandi (detti link^ o^ hyperlink^ ) ad altre pagine web; immagini fisse o in movimento; suoni; scenari tridimensionali interattivi; codice eseguibile localmente.

L'utilizzo del Web è semplicissimo: un utente legge il testo della pagina, vede le immagini, ascolta la musica, ecc.; se seleziona col mouse un link (che di solito appare come una parola sottolineata e di diverso colore) la pagina di partenza viene sostituita sullo schermo da quella relativa al link selezionato.

Si noti che la nuova pagina può provenire da qualunque parte del pianeta.

1.1) Architettura client-server del Web

Il Web è una architettura software di tipo client-server , nella quale sono previste

due tipologie di componenti software: il client e il server , ciascuno avente compiti ben definiti.

1.1.1) Client

Il client (o user agent ) è lo strumento a disposizione dell'utente che gli permette

l'accesso e la navigazione nell'ipertesto del Web.

Esso ha varie competenze: trasmettere all'opportuno server le richieste di reperimento dati che derivano dalle azioni dell'utente; ricevere dal server le informazioni richieste; visualizzare il contenuto della pagina Web richiesta dall'utente, gestendo in modo appropriato tutte le tipologie di informazioni in esse contenute; consentire operazioni locali sulle informazioni ricevute (ad esempio salvarle su disco, stamparle).

I client vengono comunemente chiamati browser^ (sfogliatori). Gli esempi più noti sono: NCSA Mosaic (il primo); Netscape Navigator; Microsoft Internet Explorer.

In generale è troppo complicato e costoso (sarebbero necessari aggiornamenti troppo frequenti) sviluppare un browser che sappia gestire direttamente tutti i tipi di informazioni presenti sul Web, poiché essi sono in continuo e rapido aumento.

Per questa ragione, di norma i browser gestiscono direttamente solo alcune tipologie di informazioni, quali: testo formattato; immagini fisse; codice eseguibile.

Viceversa, di norma gli altri tipi di informazioni vengono gestiti in uno (o entrambi) dei seguenti modi: consegnandoli a un programma esterno ( helper ) che provvederà alla corretta gestione (ad esempio, un file contenente un filmato verrà consegnato a un programma per il playback di filmati);

deve essere in grado di gestire molte richieste contemporaneamente, e mentre fa questo deve continuare a rimanere in ascolto di nuove richieste.

Il secondo requisito in particolare implica una qualche forma di concorrenza nel lavoro del server. Essa si può ottenere in vari modi, anche in funzione delle caratteristiche del sistema operativo sottostante. Le due tecniche più diffuse sono descritte nel seguito.

Clonazione del server L'idea è semplice: per ogni nuova richiesta che arriva, il server (che è sempre in ascolto): crea una nuova copia di se stesso alla quale affida la gestione della richiesta; si mette subito in attesa di nuove richieste; la copia clonata si occupa di soddisfare la richiesta e poi termina.

Le varie copie del server vivono in spazi di indirizzamento separati, e il loro avvicendamento nell'uso della CPU è governato dal sistema operativo.

Questo è un metodo tipico di S.O. multitasking quali UNIX, e si ottiene con l'uso della fork().

Vantaggi: il codice del server rimane semplice, poiché la clonazione è demandata in toto al S.O.

Svantaggi poiché in genere la gestione di una richiesta è piuttosto rapida, il tempo di generazione del clone può non essere trascurabile rispetto al tempo di gestione della richiesta, introducendo così un overhead che può penalizzare l'efficienza del sistema.

Server multithreaded Esiste una sola copia del server, che però è progettato per essere in grado di generare thread multipli: il thread principale (quello iniziale) rimane sempre in ascolto delle richieste; quando ne arriva una, esso genera un nuovo thread che prima la gestisce e poi termina.

Questo metodo richiede che il S.O. offra librerie di supporto al multithreading, che ormai sono presenti in tutti i S.O. moderni (UNIX, Windows 95 e NT, MacOS, Linux) per cui di fatto è universalmente applicabile.

Vantaggi: la creazione di un thread è molto più veloce di una fork()^ (anche 30 volte sotto UNIX), quindi in generale è più efficiente per gestire operazioni veloci come l'esaudire la richiesta del client.

Svantaggi:

il codice del server diviene un pò più complesso, perché al suo interno si dovranno gestire la creazione dei thread ed il loro avanzamento, anche in termini di sincronizzazione.

1.2) Standard utilizzati nel Web

C i sono tre standard principali che, nel loro insieme, costituiscono

l'architettura software del Web: sistema di indirizzamento basato su Uniform Resource Locator ( URL ): è un meccanismo standard per fare riferimento alle entità indirizzabili (risorse) nel Web, che possono essere: documenti (testo, immagini, suoni, ecc.); programmi eseguibili (vedremo poi); linguaggio HTML ( HyperText Markup Language ): è il linguaggio per la definizione delle pagine Web; protocollo HTTP ( HyperText Transfer Protocol ): è il protocollo che i client e i server utilizzano per comunicare.

1.2.1) URL

Una URL costituisce un riferimento a una qualunque risorsa accessibile nel

Web.

Tale risorsa ovviamente risiede da qualche parte, ed è in generale possibile accedervi in vari modi.

Dunque, una URL deve essere in grado di indicare: come si vuole accedere alla risorsa; dove è fisicamente localizzata la risorsa; come è identificata la risorsa.

Per queste ragioni, una URL è fatta di 3 parti, che specificano: il metodo di accesso^ ; l' host^ che detiene la risorsa; l' identità^ della risorsa.

Un tipico esempio di una URL è:

http://somewhere.net/products/index.html

nella quale:

http:// (^) è il metodo di accesso

somewhere.net (^) è il nome dell'host

In questo modo si possono avere, sullo stesso host, diversi server Web in ascolto su diverse porte.

Identità della risorsa Consiste, nella sua forma più completa, della specifica del nome di un file e del cammino che porta al direttorio in cui si trova.

Ad esempio, la URL:

http://somewhere.net/products/toasters/index.html

specifica il file index.html contenuto nel direttorio toasters, a sua volta contenuto nel direttorio products^ il quale si trova nel direttorio radice dell'host somewhere.net.

Si noti che: la sintassi è quella di Unix; il direttorio radice è relativo all'albero dei documenti Web, e non è necessariamente la radice dell'intero file system dell'elaboratore; ciò fa sì che sia di fatto impossibile accedere per mezzo del Web al di fuori di tale parte del file system: il server, di norma, non consente di accedere a nulla che non sia nell'albero dei documenti Web.

Esistono alcune regole per il completamento di URL non interamente specificate: se manca il nome del direttorio, si assume quello della pagina precedente; se manca il nome del file (ma c'è quello del direttorio), a seconda del server: si restituisce un file prefissato del direttorio specificato (index.html, default.html oppure welcome.html); se tale file non esiste, talvolta si restituisce un elenco dei file nel direttorio.

Infine, una convenzione usata spesso è la seguente. A fronte di una URL del tipo:

http://somewhere.net/~username/

il server restituisce il file welcome.html situato nel direttorio public_html situato nel direttorio principale ( home directory^ ) dell'utente^ username.

Questo meccanismo consente agli utenti, che di norma hanno libero accesso al proprio home directory, di mantenere facilmente proprie pagine Web.

1.2.2) Linguaggio HTML

Il linguaggio per la formattazione di testo HTML è una specializzazione del

linguaggio SGML ( Standard Generalized Markup Language ) definito nello standard ISO

HTML è specializzato nel senso che è stato progettato appositamente per un utilizzo nell'ambito del Web.

Un markup language si chiama così perché i comandi ( tag ) per la formattazione sono inseriti in modo esplicito nel testo, a differenza di quanto avviene in un word processor WYSIWYG^ ( What You See Is What You Get^ ), nel quale il testo appare visivamente dotato dei suoi formati, come fosse stampato. TROFF e TeX sono altri markup language, mentre ad esempio Microsoft Word è WYSIWYG.

Per esempio in HTML il testo:

...questo è grassetto e questo no...

indica che la parola grassetto deve essere visualizzata in grassetto ( bold ). Quindi il testo in questione dovrà apparire come segue:

...questo è grassetto e questo no...

Il ruolo di HTML è quindi quello di definire il modo in cui deve essere visualizzata una pagina Web (detta anche pagina HTML ), che tipicamente è un documento di tipo testuale contenente opportuni tag di HTML.

Il client, quando riceve una pagina compie le seguenti operazioni: interpreta i tag presenti nella pagina; formatta la pagina di conseguenza, provvedendo automaticamente ad adattarla alle condizioni locali (risoluzione dello schermo, dimensione della finestra, profondità di colore, ecc.); mostra la pagina formattata sullo schermo.

Nella formattazione si ignorano: sequenze multiple di spazi; caratteri di fine riga, tabulazioni, ecc.

I tag HTML possono essere divisi in due categorie: tag per la formattazione di testo; tag per altre finalità (inclusione di immagini, interazione con l'utente, elaborazione locale, ecc.).

Il linguaggio HTML è in costante evoluzione, si è passati dalla versione 1. alla 2.0 (rfc 1866), poi alla 3.0 e ora alla 3.2.

E' in corso una attività di standardizzazione della versione 3, che cerca di mediare le proposte, spesso incompatibili, che sono portate avanti da diverse organizzazioni (quali Netscape e Microsoft) le quali spingono perché proprie

Tag per la formattazione Alcuni dei tag esistenti per la formattazione del testo sono i seguenti:

... (^) Grassetto ( bold )

... (^) Corsivo ( italic )

... (^) Intestazione ( heading ) di livello x (da 1 a 6)

... (^) Testo visualizzato esattamente come è scritto

( preformatted^ ), con spazi multipli, caratteri di^ fine linea, ecc.

Ci sono moltissimi altri tag per la formattazione, coi quali si possono specificare: dimensione, colore, tipo dei caratteri; centratura del testo; liste di elementi; tabelle di testo in forma grafica ( ); divisori ( ,^ ,^

); colore di sfondo della pagina; suddivisione della finestra fra più pagine ( ,^ ).

Tag per altre finalità Questi sono i tag che forniscono al Web la sua grande versatilità. Anch'essi sono in continua evoluzione, permettendo di includere sempre nuove funzionalità.

I tag di questo tipo più usati sono quelli per la inclusione di immagini in-line (visualizzate direttamente all'interno della pagina) e per la gestione degli hyperlink.

Il tag per la inclusione di immagini ha la seguente forma:

oppure

Questo tag fa apparire l'immagine di cui alla URL. L'immagine (se il client è configurato per farlo) viene richiesta automaticamente e quando è disponibile viene mostrata. Altrimenti, al suo posto appare una piccola icona, sulla quale bisogna fare click se si vuole vedere la relativa immagine (che solo allora verrà richiesta), seguita dal testo specificato nel parametro ALT.

Altri parametri del tag servono a: specificare le dimensioni dell'immagine ( WIDTH, HEIGHT); specificare l'allineamento dell'immagine e del testo circostante ( ALIGN); specificare le aree dell'immagine sensibili ai click del mouse ( ISMAP).

Tag per la gestione degli hyperlink

Costituiscono il fondamento funzionale su cui è basato il Web, perché è per mezzo di questi che si realizzano le funzioni ipertestuali.

Il tag è uno solo (con alcune varianti) e viene chiamato anchor :

.....

La sua forma standard è:

...testo visibile...

Nella pagina la stringa testo visibile appare sottolineata e, di norma, di colore blu:

...testo visibile...

Quando l'utente fa click su un'ancora (ossia sul testo visibile della stessa) il client provvede a richiedere il documento di cui alla URL, lo riceve, lo formatta e lo mostra nella finestra al posto di quello precedente.

1.2.3) Il protocollo HTTP

Il protocollo HTTP sovraintende al dialogo fra un client e un server web, ed è

il linguaggio nativo del Web.

HTTP non è ancora uno standard ufficiale. Infatti, HTTP 1.0 (rfc 1945) è informational , mentre HTTP 1.1 (rfc 2068) è ancora in fase di proposta; parleremo di quest'ultimo più avanti.

HTTP è un protocollo ASCII , cioè i messaggi scambiati fra client e server sono costituiti da sequenze di caratteri ASCII (e questo, come vedremo, è un problema se è necessaria la riservatezza delle comunicazioni).

In questo contesto per messaggio^ si intende la richiesta del cliente oppure la risposta del server, intesa come informazione di controllo; viceversa, i dati della URL richiesta che vengono restituiti dal server non sono necessariamente ASCII (esempi di dati binari: immagini, filmati, suoni, codice eseguibile).

Il protocollo prevede che ogni singola interazione fra client e server si svolga secondo il seguente schema: apertura di una connessione di livello transport fra client e server (TCP è lo standard di fatto, ma qualunque altro può essere usato); invio di una singola richiesta da parte del client, che specifica la URL desiderata; invio di una risposta da parte del server e dei dati di cui alla URL richiesta; chiusura della connessione di livello transport.

e che l'utente attivi tale link. A tal punto il client: chiede al DNS l'indirizzo IP di somewhere.net; apre una connessione TCP con somewhere.net, port 80; invia la sua richiesta.

Essa è costituita da un insieme di comandi (uno per ogni linea di testo)

Dunque, ad esempio, si potrà avere

HTTP/1.0 200 OK

Le metainformazioni dicono al client ciò che deve sapere per poter gestire correttamente i dati che riceverà.

Sono elencate in linee di testo successive alla riga di stato e terminano con una linea vuota^.

Tipiche metainformazioni sono:

Server: ... (^) Identifica il tipo di server

Date: ... (^) Data e ora della risposta

Content-type: ... (^) Tipo dell'oggetto inviato

Content-length: ... (^) Numero di byte dell'oggetto inviato

Content-language: ... (^) Linguaggio delle informazioni

Last-modified: ... (^) Data e ora di ultima modifica

Content-encoding: ... (^) Tipo di decodifica per ottenere il content

Il Content-type si specifica usando lo standard MIME ( Multipurpose Internet Mail Exchange ), nato originariamente per estendere la funzionalità della posta elettronica.

Un tipo MIME è specificato da una coppia

MIME type/MIME subtype

Vari tipi MIME sono definiti, e molti altri continuano ad aggiungersi. I più comuni sono:

Type/Subtype Estensione Tipologia delle informazioni

text/plain .txt, .java (^) testo

text/html .html, .htm (^) pagine html

image/gif .gif (^) immagini gif

image/jpeg .jpeg, .jpg (^) immagini jpeg

audio/basic .au (^) suoni

video/mpeg .mpeg (^) filmati

application/octet-stream .class, .cla, .exe (^) programmi eseguibili

application/postscript .ps (^) documenti Postscript

x-world/x-vrml .vrml, .wrl (^) scenari 3D