modulo 03 / lezione 17
Osservare il programma
Network: richiesta, payload, risposta
Capire se il difetto vive nel client, nella richiesta, nel server o nei dati ricevuti. Usare filtro per tipo, throttling e replay della richiesta.
In parole semplici
Tra il tuo codice e il server c’è una linea: la rete. Quando qualcosa non funziona, il pannello Network del browser ti permette di guardare ogni richiesta nei dettagli e capire dove si rompe il flusso: nel codice client, nella richiesta inviata, nella risposta del server o nel decodificarla.
Parole nuove
- request (richiesta): messaggio che il client invia al server.
- response (risposta): messaggio che il server rinvia al client.
- payload: corpo del messaggio (request body, response body).
- header: meta-informazioni del messaggio (Content-Type, Authorization).
- preflight: richiesta
OPTIONSautomatica per controllare permessi CORS. - throttling: simulazione di una connessione lenta.
Cosa impari
- Aprire e leggere il pannello Network.
- Distinguere bug nel client (non ho mai mandato) da bug nella request (ho mandato male), nella response (ho ricevuto male) e nel parsing (ho letto male).
- Replicare una richiesta (replay) con e senza modifiche.
- Usare throttling per riprodurre bug “solo con rete lenta”.
Le quattro stazioni
Una richiesta passa per quattro punti dove può rompersi:
[1. CLIENT] → [2. REQUEST] → [3. SERVER/RESPONSE] → [4. PARSING CLIENT]
- CLIENT: il codice client costruisce la chiamata. Se sbaglia URL, header, body, il bug è qui.
- REQUEST: la chiamata parte e attraversa la rete (e i gateway). Se non parte o non arriva, il bug è qui.
- SERVER/RESPONSE: il server elabora e risponde. Se la risposta è sbagliata, il bug è qui.
- PARSING CLIENT: il client legge la risposta. Se la legge male, il bug è qui.
Il pannello Network ti dice quale delle quattro stazioni è quella rotta.
Layout del pannello Network
Apri DevTools → tab Network → ricarica la pagina o esegui l’azione.
Vedi:
- Lista richieste: ogni riga è una request.
- Filtri: All / XHR-Fetch / JS / CSS / Img / Doc / WS.
- Throttling: dropdown con “No throttling”, “Fast 3G”, “Slow 3G”, “Offline”.
- Disable cache: utile durante il debug.
- Preserve log: mantieni richieste anche dopo refresh.
Per ogni richiesta:
- Headers: header inviati e ricevuti.
- Payload / Request: cosa hai mandato.
- Response / Preview: cosa hai ricevuto (preview formatta JSON).
- Timing: quanto tempo è durata ogni fase (DNS, connection, TTFB, content download).
Caso 1: la richiesta non parte (bug nel CLIENT)
In Network non vedi nessuna richiesta legata all’azione.
Cause tipiche:
- Errore JS prima del fetch (vedi Console).
- Condizione che impedisce la chiamata.
- Listener non collegato (vedi modulo 7).
Diagnosi: console, breakpoint sul punto in cui dovresti fare fetch.
Caso 2: la richiesta parte male (bug nella REQUEST)
In Network vedi la richiesta. Apri “Headers” e “Payload”:
- URL giusto? metodo giusto (GET/POST)?
Content-Typecorretto?Authorizationpresente?- Body con i campi attesi?
Diagnosi: confronta con la documentazione o con una chiamata “buona” passata.
Caso 3: il server risponde con errore (bug SERVER)
Status 4xx o 5xx. Apri “Response”:
- 4xx → cosa hai mandato? Spesso il body contiene il motivo (modulo 2.4).
- 5xx → chiedi i log del server in quel timestamp.
Diagnosi: replicare con curl per escludere il browser.
Caso 4: il client decodifica male (bug PARSING)
Risposta 200 con dati corretti, ma l’interfaccia non li mostra.
Cause tipiche:
- Campo con nome diverso (
user_namevsuserName). - Tipo diverso (stringa vs numero).
- Array vuoto inatteso.
JSON.parsesu un body non-JSON.
Diagnosi: confronta “Response Preview” con quello che il tuo codice prova a leggere.
Replay e modify
Click destro su una richiesta → “Replay XHR” (Chrome) o “Resend” (Firefox). La richiesta viene rifatta identica.
Per modificarla: “Copy as fetch” → incolla in console → modifica un parametro → esegui. Diagnosi rapida per bug specifici di un campo.
Throttling
Se il bug si vede solo con rete lenta, simula:
- Network → dropdown → “Slow 3G”.
- Ricarica.
- Osserva timing e ordine.
Bug tipici: race condition (modulo 7), timeout, doppi submit.
CORS in 30 secondi
Quando il client e il server stanno su origin diversi (host, porta, protocollo), il browser fa un preflight OPTIONS per chiedere permesso.
Sintomi tipici:
- Console:
Access to fetch at '...' has been blocked by CORS policy. - Network: una richiesta
OPTIONSprecede la “vera” e fallisce.
Cause possibili:
- Header
Access-Control-Allow-Originmancante o sbagliato. - Metodo non in
Access-Control-Allow-Methods. - Cookie senza
credentials: "include"+Access-Control-Allow-Credentials.
Approfondimento nel modulo 8.
Esercizio guidato
- Apri una web app reale che fai una
POST. - Esegui l’azione: cattura la richiesta in Network.
- Annota: URL, metodo, header
Content-Type, body. - “Copy as cURL” → incolla in terminale → esegui. Ottieni la stessa risposta? Se no, perché?
- Attiva “Slow 3G” e ripeti. Cosa cambia? Quante richieste partono? In che ordine?
Errori frequenti del principiante
- Guardare solo la status code. Anche con 200, la response può essere sbagliata.
- Confondere request e response. Quale dei due hai sbagliato? Il pannello li mostra entrambi.
- Ignorare gli header. Spesso il bug vive in
Content-TypeoAuthorization. - Pensare che “il browser sbagli”. Quasi mai. Quasi sempre è il client che chiede male.