GET
Il metodo GET richiede il trasferimento di una rappresentazione corrente selezionata per la risorsa di destinazione. Una risposta riuscita riflette la qualità di “identità” identificata dall’URI di destinazione.
Quindi, il recupero di informazioni identificabili tramite HTTP viene solitamente eseguito effettuando una richiesta GET su un identificatore associato al potenziale di fornire tali informazioni in una risposta 200 (OK).
GET è il meccanismo principale di recupero delle informazioni e il fulcro di quasi tutte le ottimizzazioni delle prestazioni. Le applicazioni che producono un URI per ogni risorsa importante possono trarre vantaggio da tali ottimizzazioni, consentendone al contempo il riutilizzo da parte di altre applicazioni, creando un effetto di rete che promuove un’ulteriore espansione del Web.
È allettante pensare agli identificatori di risorse come nomi di percorso del file system remoto e alle rappresentazioni come a una copia del contenuto di tali file. In effetti, è così che vengono implementate molte risorse. Tuttavia, non ci sono tali limitazioni nella pratica.
L’interfaccia HTTP per una risorsa ha le stesse probabilità di essere implementata come un albero di oggetti di contenuto, una vista programmatica su vari record di database o un gateway per altri sistemi informativi. Anche quando il meccanismo di mappatura URI è legato a un file system, un server di origine potrebbe essere configurato per eseguire i file con la richiesta come input e inviare l’output come rappresentazione anziché trasferire i file direttamente. Indipendentemente da ciò, solo il server di origine deve sapere come ogni identificatore di risorsa corrisponde a un’implementazione e come tale implementazione riesce a selezionare e inviare una rappresentazione corrente della risorsa di destinazione.
Un client può modificare la semantica di GET per essere una “richiesta di intervallo”, richiedendo il trasferimento solo di alcune parti della rappresentazione selezionata, inviando un campo di intestazione Range nella richiesta.
Sebbene il framing del messaggio di richiesta sia indipendente dal metodo utilizzato, il contenuto ricevuto in una richiesta GET non ha una semantica generalmente definita, non può alterare il significato o l’obiettivo della richiesta e potrebbe portare alcune implementazioni a rifiutare la richiesta e chiudere la connessione a causa del suo potenziale come attacco di contrabbando di richieste. Un client NON DOVREBBE generare contenuto in una richiesta GET a meno che non venga effettuato direttamente a un server di origine che ha precedentemente indicato, in banda o fuori banda, che tale richiesta ha uno scopo e sarà adeguatamente supportata. Un server di origine NON DOVREBBE basarsi su accordi privati per ricevere contenuto, poiché i partecipanti alla comunicazione HTTP spesso non sono a conoscenza degli intermediari lungo la catena di richiesta.
Baseline Ampiamente disponibile
Il metodo HTTP GET richiede una rappresentazione della risorsa specificata. Le richieste che utilizzano GET devono essere utilizzate solo per richiedere dati e non devono contenere un corpo.
Nota: la semantica dell’invio di un corpo di messaggio nelle richieste GET non è definita. Alcuni server potrebbero rifiutare la richiesta con una risposta di errore client 4XX.
La richiesta ha un body | No |
---|---|
Successful response has body | Si |
Safe | Si |
Idempotent | Si |
Cacheable | Si |
Allowed in HTML forms | Si |
Sintassi
HTTP GET <request-target>["?"<query>] HTTP/1.1
<request-target>
Identifica la risorsa di destinazione della richiesta quando combinata con le informazioni fornite nell’intestazione Host. Questo è un percorso assoluto (ad esempio, /path/to/file.html) nelle richieste a un server di origine e un URL assoluto nelle richieste ai proxy (ad esempio, http://www.esempiosito.com/path/to/file.html).
<query>
Un componente di query facoltativo preceduto da un punto interrogativo ?. Spesso utilizzato per trasportare informazioni identificative sotto forma di coppie chiave=valore.
Esempi
Recupero riuscito di una risorsa
La seguente richiesta GET richiede la risorsa su example.com/contact:
HTTP GET /contact HTTP/1.1 Host: example.com User-Agent: curl/8.6.0 Accept: */*
Il server invia indietro la risorsa con un codice di stato 200 OK, che indica il successo:
HTTP HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Dat3: Fri, 21 Jun 2024 14:18:33 GMT Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT Content-Length: 1234 <!doctype html> <!-- Segue il contenuto HTML -->
Specifiche
Semantica HTTP
# GET
Compatibilità del browser