aboutsummaryrefslogtreecommitdiff
path: root/files/it/web/http/sessione/index.html
blob: e414eb9d19163dd6f00a8706af1e6045260e7113 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
---
title: Una tipica sessione HTTP
slug: Web/HTTP/Sessione
translation_of: Web/HTTP/Session
---
<div>{{HTTPSidebar}}</div>

<p>Nei protocolli client-server come l’HTTP, la sessione è composta da tre fasi:</p>

<ol>
 <li>Il cliente stabilisce una connessione TCP (o l’appropriata connessione nel caso non sia TCP).</li>
 <li>Il cliente manda la sua richiesta e aspetta per la risposta.</li>
 <li>Il server processa la richiesta, mandando poi la sua risposta, con al suo interno il codice di stato e un dato appropriato.</li>
</ol>

<p>Da quando è uscito HTTP/1.1, la connessione non si chiude più dopo la terza fase, e il cliente può fare un altra richiesta: questo significa che la seconda e terza fase possono essere usate molte volte.</p>

<h2 id="Stabilire_una_connessione"><strong>Stabilire una connessione</strong></h2>

<p>Nei protocolli client-server è il client che stabilisce la connessione. Aprire una connessione in HTTP significa avviare una connessione nel livello di trasporto sottostante, che di solito è il TCP.</p>

<p>Con TCP la porta di default, per un server HTTP su un computer, è la porta 80. Possono essere usate anche altre porte, come la 8000 o la 8080. L’URL della pagina da raggiungere contiene sia il nome del dominio che la numero di porta, anche se quest’ultimo può essere omesso se è 80. Vedi <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web">identificare le risorse sul web</a> per maggiori dettagli.</p>

<div class="note"><strong>Nota:</strong> Il modello client-server non permette al server di inviare dati al client senza una specifica richiesta da parte di esso. Per aggirare questo problema, gli sviluppatori web usano varie tecniche: pingare il server periodicamente con <a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHTTPRequest">XMLHTTPRequest</a>, <a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch">Fetch</a> APIs, usando il <a href="https://developer.mozilla.org/en/WebSockets">WebSockets API</a>, o protocolli simili.</div>

<h2 id="Mandare_una_client_request">Mandare una client request</h2>

<p>Una volta che la connessione si è stabilita, il programma utente può mandare la richiesta (un programma utente è tipicamente un web browser, ma può essere tante cose, per esempio un motore di ricerca). Una client request consiste nelle direttive testuali, separate dal CRLF (carriage return line feed), divise in 3 blocchi:</p>

<ol>
 <li>La prima riga contiene un request method seguito dai suoi parametri:
  <ul>
   <li>il percorso di un documento, quindi l’URL assoluto senza protocollo o dominio.</li>
   <li>Versione del protocollo HTTP.</li>
  </ul>
 </li>
 <li>righe susseguenti rappresentano un header HTTP, che danno al server le informazioni su quale tipo di dato è più appropriato (ad esempio  che liguaggio o tipo di MIME) o altri dati che alterano il suo comportamento (ad esempio non mandare una risposta anche se già   memorizzata nella cache). Gli header HTTP formano un blocco che termina con una riga vuota.</li>
 <li>L’ultimo blocco è facoltativo, e contiene dati superflui usati principalmente dal POST method.</li>
</ol>

<h3 id="Esempi">Esempi:</h3>

<p>recuperare la pagina radice di <a href="https://wiki.developer.mozilla.org/">developer.mozilla.org</a> , e dire al server che il programma utente preferirebbe, se possibile, avere la pagina in lingua francese.</p>

<pre class="notranslate">GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
</pre>

<p>Si osservi che l’ultima riga è vuota, questo separa il blocco data da quello header. Dato che non c’è nessuna content-lenght nell’ header HTTP, questo blocco di dati si presenta vuoto, marcando la fine degli headers, permettendo così al server di processare la richiesta dal momento in cui riceve quella riga vuota.</p>

<p>Per esempio, mandando il risultato di un form:</p>

<pre class="notranslate">POST /contact_form.php HTTP/1.1
Host: developer.mozilla.org
Content-Length: 64
Content-Type: application/x-www-form-urlencoded

name=Joe%20User&amp;request=Send%20me%20one%20of%20your%20catalogue
</pre>

<h3 id="Metodi_di_richiesta">Metodi di richiesta</h3>

<p>L’HTTP definisce un set di <a href="https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Methods">richieste metodo</a> che indicano l’azione desiderata da fare a seconda della risorsa. Anche se possono essere nomi, queste richieste sono alcune volte riferite come dei verbi HTTP. La richieste più comuni sono GET e POST:</p>

<ul>
 <li>il metodo GET richiede un dato rappresentante la risorsa specificata. Richieste fatte usando il GET  può solo recuperare dati.</li>
 <li>Il metodo POST invia dati al server che potrebbe cambiare il suo stato. Questo è il metodo spesso usati per i <a href="https://wiki.developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms">Form HTML</a>.</li>
</ul>

<h2 id="Struttura_di_una_risposta_server"><strong>Struttura di una risposta server</strong></h2>

<p>Dopo che l’agente connesso ha inviato la richiesta, il web server lo processa, e alla fine restituisce una risposta. Analogamente alla richiesta client, una risposta server è formata da direttive, separate dal CRLF, sebbene divise in tre blocchi:</p>

<ol>
 <li>La prima linea, la<em>status line</em>, consiste in un riconoscimento della versione http usata, seguita da un status request (e il suo breve significato in parole comprensibili dall’uomo).</li>
 <li>Le righe successive rappresentano specifici header HTTP, che danno al client informazioni riguardanti i dati inviati (per esempio: tipo, dimensione dei dati, algoritmo di compressione usato, note sul caching). Analogamente al blocco di header HTTP di una richiesta client, questi header HTTP formano un blocco finale con una linea vuota.</li>
 <li>Il blocco finale è un blocco di dati, che contieni i dati opzionali.</li>
</ol>

<h3 id="Esempio_di_risposte"><strong>Esempio di risposte</strong></h3>

<p>Risposta pagina web riuscita:</p>

<pre class="notranslate">HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 55743
Connection: keep-alive
Cache-Control: s-maxage=300, public, max-age=0
Content-Language: en-US
Date: Thu, 06 Dec 2018 17:37:18 GMT
ETag: "2e77ad1dc6ab0b53a2996dfd4653c1c3"
Server: meinheld/0.6.1
Strict-Transport-Security: max-age=63072000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Vary: Accept-Encoding,Cookie
Age: 7


&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
  &lt;meta charset="utf-8"&gt;
  &lt;title&gt;A simple webpage&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h1&gt;Simple HTML5 webpage&lt;/h1&gt;
  &lt;p&gt;Hello, world!&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>

<p>Notifica che la risorsa richiesta è stata definitivamente trasferita:</p>

<pre class="notranslate">HTTP/1.1 301 Moved Permanently
Server: Apache/2.4.37 (Red Hat)
Content-Type: text/html; charset=utf-8
Date: Thu, 06 Dec 2018 17:33:08 GMT
Location: <a class="linkification-ext" href="../../../../" title="Linkification: https://developer.mozilla.org/">https://developer.mozilla.org/</a> <strong><em>(questo è il nuovo link della risorsa; ci si aspetta che l’utente agente lo prenda)</em></strong>
Keep-Alive: timeout=15, max=98
Accept-Ranges: bytes
Via: Moz-Cache-zlb05
Connection: Keep-Alive
Content-Length: 325 <em>(</em><strong><em>Il contenuto è una pagina di default da mostrare se l’utente agente non è in grado di seguire il link</em></strong><em><strong>)</strong></em>


&lt;!DOCTYPE html... <strong><em>(contiene un pagina personalizzata che aiuta l’utente a trovare la risorsa mancante)</em></strong>
</pre>

<p>Notifica che la risorsa richiesta non esiste:</p>

<pre class="notranslate">HTTP/1.1 404 Not Found
Content-Type: text/html; charset=utf-8
Content-Length: 38217
Connection: keep-alive
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Content-Language: en-US
Date: Thu, 06 Dec 2018 17:35:13 GMT
Expires: Thu, 06 Dec 2018 17:35:13 GMT
Server: meinheld/0.6.1
Strict-Transport-Security: max-age=63072000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Vary: Accept-Encoding,Cookie
X-Cache: Error from cloudfront


&lt;!DOCTYPE html... <strong><em>(contiene un pagina personalizzata che aiuta l’utente a trovare la risorsa mancante)</em></strong>
</pre>

<h3 id="Status_code_di_risposta"><strong>Status code di risposta</strong></h3>

<p><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Status">HTTP response status codes</a> indica se una specifica richiesta HTTP sia stata completata con successo. Le risposte sono suddivise in cinque classi: risposte informative, risposte di successo, reindirizzamenti, errori client, ed errori server.</p>

<ul>
 <li>{{HTTPStatus(200)}}: OK. La richiesta ha avuto successo.</li>
 <li>{{HTTPStatus(301)}}: Definitivamente Trasferita. Questo codice di risposta significa che l’URL della risorsa richiesta è stata cambiata.</li>
 <li>{{HTTPStatus(404)}}: Non trovato. Il server non riesce a trovare la risorsa richiesta.</li>
</ul>

<h2 id="Vedi_anche"><strong>Vedi anche</strong></h2>

<ul>
 <li><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web">Identificare le risorse sul web</a></li>
 <li><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers">Header HTTP</a></li>
 <li><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods">Metodi di risposta HTTP</a></li>
 <li><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status">Status codes di risposta HTTP</a><a href="/en-US/docs/Web/HTTP/Status"> </a></li>
</ul>