HTTP: i nuovi status code

31 ottobre 2011

I nuovi Status-Code

Andiamo ora ad analizzare i nuovi Status Codes proposti:

428 Precondition Required

Questo Status Code è stato formulato per risolvere il problema dell’accesso concorrente di più client ad una stessa risorsa, che ne modificano lo stato.

Accade spesso che un client ottiene una risorsa (ad es. attraverso una GET), ne modifica lo stato, e la rimanda al server (tramite un metodo PUT). Ma se nel frattempo un altro client ne ha già modificato lo stato, ciò conduce ad un conflitto e al cosiddetto problema del “lost update”.

Quando il server invia una risposta con questo codice, deve quindi indicare anche COME effettuare nuovamente il SUBMIT, questa volta con successo. Ecco un esempio:

Figura 1. Lo Status Code 429 Precondition Required

Lo Status Code 429 Precondition Required

429 Too Many Requests

Questo Status Code indica che l’utente ha inviato troppe richieste in un certo intervallo di tempo. Nella risposta il server deve includere un messaggio che spieghi la condizione verificatasi e può contenere un header di tipo Retry-After che indichi il tempo di attesa fissato prima di inviare una nuova richiesta.

Figura 2. 429 Too Many Requests

429 Too Many Requests

L’esempio in figura mostra un tempo di attesa, specificato nel Retry-After, fissato a 3600 secondi. Si noti che il server può stabilire il limite di richieste sia sulla base della disponibilità di risorse, sia sulla base dell’autenticazione dell’utente o di un cookie di tipo “stateful”.

431 Request Header Fields Too Large

Questa risposta viene fornita quando il server riceve una HTTP Request avente headers troppo grandi e può verificarsi sia quando gli headers, in totale, sono troppo grandi sia quando un solo header eccede le dimensioni consentite.

Figura 3. 431 Request Header Fields Too Large

431 Request Header Fields Too Large

L’esempio in figura mostra un messaggio relativo ad un certo header denominato “Example”.

511 Network Authentication Required

Per quanto riguarda questo Status Code, il discorso è un pochino più articolato. Siamo nella condizione in cui un utente richiede l’accesso ad una risorsa protetta da un meccanismo di autenticazione, ad esempio tramite un form HTML.

Prima di ottenere l’accesso, il client può effettuare solo richieste sulla porta 80 (TCP). Tali richieste vengono inviate ad un “login server”, che tipicamente è un Captive Portal. È buona norma, inoltre, che il Captive Portal risieda su un server distinto rispetto a quello che offre la risorsa richiesta e si preoccupi di loggare tutte le richieste pervenute. Ad esempio, una tipica richiesta potrebbe essere la seguente:

GET /index.htm HTTP/1.1
Host: www.example.com

La risposta del server sarà di tipo 511, come si vede in figura:

Figura 4. 511 Network Authentication Required

511 Network Authentication Required

Alcune considerazioni (di sicurezza) finali

Tutte le HTTP Response contenente gli Status Codes presentati NON DEVONO essere conservate in cache.

È importante inoltre valutare l’utilizzo dei vari codici a seconda della situazioni. Ad esempio, nel caso degli status codes 429 (Too Many Requests) e 431 (Request Header Fields Too Large) potrebbe essere più appropriato “droppare” direttamente le connessioni, piuttosto che visualizzare messaggi.

Interessante il caso del codice 511: generalmente una HTTP Response con status code 511 non proviene dal server indicato nella URL della HTTP Request. Ciò presenta alcune implicazioni dal punto di vista della sicurezza: ad esempio, un attacker potrebbe intercettare cookie o credenziali di autenticazione HTTP inviate da un user agent, oppure manipolare direttamente i cookie. Va detto che, in ogni caso, un qualsiasi Captive Portal che non utilizzi lo status code 511 di fatto presenta lo stesso tipo di problemi.

Per approfondire lo studio e l’evoluzione del protocollo HTTP (che esula dagli scopi del presente articolo) si veda la relativa RFC.



Link utili
Se vuoi aggiornamenti su HTTP: i nuovi status code inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su HTTP: i nuovi status code

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy