Potresti aver sentito parlare di richieste GET e POST, ma sono solo l'inizio.

Ogni richiesta HTTP utilizza un metodo per descrivere il suo scopo essenziale. Ogni metodo ha usi specifici per attività che vanno dal recupero di una pagina Web all'eliminazione di una risorsa. GET e POST sono i due più familiari, ma ce ne sono altri sette.

Scopri questo concetto e a cosa serve ciascuno dei nove possibili metodi HTTP.

Che cos'è un metodo HTTP?

Ogni richiesta HTTP che effettui include un'azione e un obiettivo per quell'azione, proprio come un verbo e un sostantivo che funge da oggetto.

L'URL identifica una risorsa univoca, che funge da destinazione della richiesta. Nel frattempo, il verbo, quale azione eseguire su quell'URL, è rappresentato da un metodo.

La prima riga di una richiesta HTTP fornisce le informazioni più significative tra cui la versione HTTP, l'URL della risorsa e il metodo della richiesta:

OTTIENI /software/htp/cics/index.html HTTP/1.1

Quali sono i 9 metodi HTTP?

I primi quattro metodi sono equivalenti alle quattro azioni del modello CRUD: Crea, Leggi, Aggiorna ed Elimina. I rispettivi metodi HTTP sono

instagram viewer
INVIARE, OTTENERE, METTERE, E ELIMINARE.

OTTENERE

La richiesta predefinita più comune che invierai quando navighi sul Web e fai clic sui collegamenti o richiedi dati tramite un'API. Il server dovrebbe restituire la risorsa nel corpo della risposta.

INVIARE

Usa POST per creare nuove risorse, in particolare quando tali risorse hanno una risorsa padre identificabile. Ad esempio, se si dispone di una risorsa /clients, è necessario creare un nuovo client inviando i dati richiesti a /clients.

METTERE

Aggiorna o sostituisci una risorsa esistente. È simile a POST, ma il client è responsabile della scelta di un identificatore univoco per la risorsa. Per creare una risorsa utilizzando PUT, l'URL della risorsa deve includere un identificatore, ad esempio, /clients/007.

ELIMINARE

Utilizzare questo metodo per eliminare la risorsa specificata nell'URL. Come tutti i metodi HTTP, il supporto dipende dal server. Può consentire a chiunque di eliminare una risorsa, anche se ciò sarebbe chiaramente rischioso. Un server che supporta DELETE di solito richiede autenticazione e autorizzazione.

Altri due metodi forniscono lievi variazioni rispetto a quanto sopra: TOPPA E TESTA. Potresti trovarli utili quando utilizzi determinate API o se ne stai creando una tua.

TOPPA

Il metodo PATCH aggiorna una risorsa esistente, con solo dati parziali. In altre parole, non è necessario fornire la rappresentazione completa della nuova risorsa, ma solo i campi che è necessario aggiornare.

TESTA

Una richiesta HEAD è per quando vuoi informazioni su una risorsa, ma non la risorsa stessa. La risposta non includerà un corpo, ma conterrà una serie di utili intestazioni HTTP. Puoi scoprire la dimensione totale di un file prima di scaricarlo, tramite l'intestazione della risposta Content-Length.

I restanti metodi—OPZIONI, COLLEGARE, E TRACCIA-sono più oscuri. Si occupano di metadati, networking e risoluzione dei problemi. Potresti trovarli utili in certi tipi di programmazione, ma probabilmente non li userai tutti i giorni.

OPZIONI

Un server dovrebbe rispondere a questo metodo dicendoti quali metodi HTTP la risorsa supporta effettivamente. Questo può essere utile per la scoperta.

COLLEGARE

Alcuni tipi di software di rete possono utilizzare questo metodo per stabilire un tunnel tra due computer. Questo è spesso usato per avviare una connessione HTTPS tramite un proxy.

TRACCIA

Questo metodo è utile per la risoluzione dei problemi. Alla ricezione, il server dovrebbe restituire la richiesta ricevuta nel corpo della risposta. Il metodo fornisce un meccanismo per verificare se le macchine intermedie hanno modificato i dettagli della richiesta.

GET e HEAD sono gli unici due metodi supportati da ogni server Web generale. Un particolare server può supportare o meno altri metodi, quindi dovresti prima controllare.

Quando potresti usare questi metodi?

La maggior parte delle volte, i metodi HTTP saranno trasparenti per te. Tuttavia, dovrai tenerne conto se aggiungi un modulo a una pagina web o utilizzi un'API.

Metodi HTTP in HTML

IL modulo elementi metodo L'attributo ti consente di impostare il metodo HTTP da utilizzare quando il modulo viene inviato. HTML supporta solo il inviare E Ottenere valori per questo attributo, oltre a un'oscura alternativa di dialogo.

<modulometodo="inviare">
...
modulo>

Puoi utilizzare funzionalità come Strumenti per sviluppatori di Chrome vedere Rete traffico e confermare il metodo inviato dal browser per una particolare richiesta. Tieni presente che la maggior parte dei moduli Web invierà un POST poiché in genere aggiornano i dati sul server. Molti moduli di ricerca, tuttavia, utilizzano GET poiché si limitano a recuperare i dati senza modificarli.

Poiché i dati POST non fanno parte dell'URL, sono più privati ​​che se li invii tramite un GET. I dati esistono ancora nel corpo della richiesta dove, in teoria, un utente malintenzionato potrebbe intercettarli. Ma l'invio di dati tramite HTTPS dovrebbe mitigare questo problema.

Non dovresti mai implementare un accesso utente con richieste GET. Anche se l'accesso può sembrare più un'operazione di lettura che una creazione o un aggiornamento, è comunque necessario utilizzare POST per proteggere i dati.

Poiché i moduli HTML supportano solo GET e POST, non puoi creare direttamente un modulo che, ad esempio, elimini una risorsa sul server. Una soluzione alternativa comune, che rispetta i principi REST sul server, consiste nell'utilizzare una variabile segnaposto e fingere che fosse il metodo HTTP originale. Per esempio:

<modulometodo="inviare">
<ingressotipo="nascosto"nome="_metodo"valore="ELIMINARE" />
...
modulo>

Il tuo codice lato server può verificare la presenza di questa variabile "metodo proxy" e trattarla come se fosse il vero metodo utilizzato. Ad esempio, in PHP:

$metodo = $_SERVER["METODO_RICHIESTA"];

Se (array_key_exists("_metodo", $_RICHIESTA)) {
$metodo = $_REQUEST["_metodo"];
}

Invio di richieste HTTP a livello di programmazione

L'API Web Fetch fornisce una funzione JavaScript fetch() che puoi utilizzare per inviare una richiesta HTTP. Supporta l'intera gamma di metodi, non solo GET e POST supportati da HTML.

La funzione fetch invierà una richiesta GET per impostazione predefinita. Per utilizzare un metodo diverso, specificarne il nome come valore per a metodo property in un oggetto inviato come secondo argomento.

andare a prendere(' https://example.com/', { metodo: "TESTA" });

Puoi anche inviare richieste HTTP da molti linguaggi lato server, incluso PHP. In quella lingua, la libreria curl è un modo comune per inviare tali richieste.

La libreria curl ha un'opzione CURLOPT_CUSTOMREQUEST che puoi impostare per specificare un metodo

Se ($ch = curl_init($url)) {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'METTERE');
curl_exec($ch);
// ...
}

Tramite la riga di comando

Lo strumento a riga di comando curl consente di trasferire dati da o verso un server, tramite uno dei numerosi protocolli. HTTP (e HTTPS) sono due casi d'uso molto comuni.

Per impostazione predefinita, curl invia una richiesta GET, come puoi confermare con il seguente comando:

curl -v -s -o /dev/null example.com/get-test

Puoi vedere il metodo di richiesta sulla quinta riga dell'output:

Puoi modificare il metodo di richiesta inviato da curl utilizzando il flag -X:

curl -v -s -o /dev/null example.com/get-test -X POST

Ora, curl invia una richiesta utilizzando il metodo POST:

HTTP ha molti usi

La maggior parte di ciò che fai sul Web riguarderà richieste GET standard, con il POST occasionale per l'invio di moduli. Ma HTTP è un protocollo molto più espressivo di quanto questo suggerisca.

Alcuni dei metodi più comuni rispecchiano il modello CRUD che rende HTTP una base eccellente su cui costruire un'API incentrata sulle risorse.