Perché il metodo GET è più veloce di POST in HTTP?
Domanda
Sono nuovo nella programmazione web e sono solo curioso di conoscere i metodi GET e POST per inviare dati da una pagina all'altra.
Si dice che il metodo GET sia più veloce di POST ma non so perché. Un motivo che ho potuto scoprire è che GET può contenere solo 255 caratteri? C'è qualche altro motivo? Per favore qualcuno mi spieghi.
Soluzione
Non si tratta molto di velocità. Ci sono molti casi in cui il POST è più applicabile. Ad esempio, i motori di ricerca indicizzeranno GET URL e i browser potranno aggiungerli ai segnalibri e mostrarli nella cronologia. Di conseguenza, se si intraprendono azioni come la modifica di un DB basato su una richiesta GET, potrebbe essere dannoso poiché alcuni bot potrebbero anche attraversare l'URL.
L'altro caso può essere un problema di sicurezza. Se pubblichi le credenziali utilizzando GET, verranno elencate nella cronologia del browser e nei file di registro del server.
Altri suggerimenti
Un'altra cosa su http post è che possono essere 2 chiamate quando si utilizza l'intestazione http Expect: 100-Continue
. Il primo browser invia le intestazioni dei post http e le risposte del server con & # 8220; HTTP 100 Continua & # 8221 ;. Quando il browser lo riceve, invia il corpo reale.
Esistono diverse idee sbagliate su GET e POST in HTTP. C'è una differenza principale, GET deve essere idempotente mentre POST non deve esserlo. Ciò significa che i GET non causano effetti collaterali, ovvero posso inviare un GET a un'applicazione Web tutte le volte che voglio (penso di premere Ctrl + R o F5 più volte) e le richieste saranno "sicure"
Non posso farlo con POST, un POST può modificare i dati sul server. Ad esempio, se ordino un articolo sul Web, l'articolo deve essere aggiunto con un POST perché lo stato è cambiato sul server, il numero di articoli che ho aggiunto è aumentato di 1. Se l'ho fatto con un POST e ho premuto Aggiorna nel browser il browser mi avvisa, se lo faccio con un GET il browser invierà semplicemente la richiesta.
Sul server GET vs POST è una pura convenzione, cioè dipende da me come sviluppatore assicurarmi di codificare il POST sul server per non ripetere la chiamata. Esistono vari modi per farlo, ma questa è un'altra domanda.
Per rispondere effettivamente alla domanda se utilizzo GET o POST per eseguire la stessa attività, non vi sono differenze di prestazioni.
Puoi leggere la RFC ( http://www.w3.org/Protocols/ rfc2616 / rfc2616.html ) per maggiori dettagli.
Guardando il protocollo http, POST o GET dovrebbero essere ugualmente facili e veloci da analizzare. Direi che non c'è differenza di prestazioni.
Dai un'occhiata alle intestazioni HTTP non elaborate
http OTTIENI
GET /index.html?userid=joe&password=guessme HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0
POST http
POST /login.jsp HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0
Content-Length: 27
Content-Type: application/x-www-form-urlencoded
userid=joe&password=guessme
Dal mio punto di vista, le prestazioni non dovrebbero essere prese in considerazione quando si confrontano GET e POST.
Dovresti pensare a OTTENERE come "un posto dove andare", e POST come "fare qualcosa". Ad esempio, un modulo di ricerca deve essere inviato utilizzando GET perché la pagina dei risultati di ricerca è un "posto" e l'utente vorrà aggiungerlo ai segnalibri o recuperarlo dalla cronologia in un secondo momento. Se si invia il modulo tramite POST, l'utente può ricreare la pagina solo inviando nuovamente il modulo. D'altra parte, se dovessi eseguire un'azione come fare clic su un pulsante Elimina, non vorresti inviarlo con GET, poiché l'azione sarebbe ripetuta ogni volta che l'utente tornava all'URL.
Solo i miei pochi centesimi dal 2016.
Sto creando un semplice sistema di messaggi. Inizialmente ho usato POST per ricevere nuovi avvisi. In jQuery ho avuto:
$.post('/a/alerts', 'stamp=' + STAMP, function(result)
{
});
E in PHP ho usato $ _POST ['stamp']. Anche da localhost ho ricevuto 90-100 ms per ogni richiesta come questa. Ho semplicemente cambiato:
$.get('/a/alerts?stamp=' + STAMP, function(result)
{
});
e in PHP sono passati a $ _GET ['stamp']. Quindi un po 'meno di 1 minuto di modifiche. Ora ogni richiesta impiega 30-40 ms .
Quindi OTTIENI può essere due volte più veloce di POST . Ovviamente non sempre, ma per piccole quantità di dati ottengo sempre gli stessi risultati.
OTTIENI è leggermente più veloce perché i valori vengono inviati nella intestazione a differenza del POST i valori vengono inviati nella richiesta corpo , nel formato specificato dal tipo di contenuto.
Di solito il tipo di contenuto è application / x-www-form-urlencoded, quindi il corpo della richiesta utilizza lo stesso formato della stringa di query:
parametro = valore & amp; = anche un altro Quando si utilizza un caricamento di file nel modulo, si utilizza invece la codifica multipart / form-data, che ha un formato diverso. È più complicato.
Sono d'accordo con altre risposte, ma non è stato menzionato che le richieste GET possono essere memorizzate nella cache mentre le richieste POST non vengono mai memorizzate nella cache. Penso che questo sia il motivo principale per cui alcune richieste GET vengono eseguite più rapidamente. (Ovviamente ciò significa che a volte nessuna richiesta viene effettivamente inviata. Quindi non è in realtà la richiesta GET che è più veloce, ma la cache del browser.)
Metodi HTTP: GET vs. POST: http://www.w3schools.com/tags/ ref_httpmethods.asp
POST farà crescere di più le tue intestazioni, solo aumentandole, ma la differenza dovrebbe essere davvero trascurabile, quindi non vedo perché questo dovrebbe essere un problema.
Basta tenere presente che il modo corretto di parlare HTTP è usare GET solo per le azioni e POST per i dati. Non è necessario, ma non si desidera avere un caso in cui i bot di Google possano, ad esempio, inserire, eliminare o manipolare dati che solo un essere umano avrebbe dovuto gestire semplicemente perché sta seguendo i collegamenti che trova .