Caricamento di file tramite il metodo GET

Come tutti sappiamo, il caricamento dei file viene spesso eseguito utilizzando il metodo POST . Quindi, perché non è ansible utilizzare il metodo GET per i caricamenti di file? Esiste un divieto specifico contro i caricamenti GET HTTP?

Le richieste GET possono contenere un corpo di quadro

RFC 2616 non impedisce un corpo di quadro come parte di una richiesta GET. Questo è spesso frainteso perché il PHP confonde le acque con il suo $_GET conosciuto. $_GET tecnicamente non ha nulla a che fare con il metodo di richiesta HTTP GET – non è altro che un elenco di valori-chiave di parametri con codifica url dalla stringa di query URI richiesta. Puoi accedere all’array $_GET anche se la richiesta è stata fatta tramite POST / PUT / etc. Strano, vero? Non è un’astrazione molto buona, vero?

Perché un ente GET è una ctriggers idea

Quindi cosa dicono le specifiche sul metodo GET … beh:

In particolare, è stata stabilita la convenzione secondo cui i metodi GET e HEAD NON DEVONO avere l’importanza di intraprendere un’azione diversa dal recupero. Questi metodi dovrebbero essere considerati “sicuri”.

Quindi la cosa importante con GET è assicurarsi che qualsiasi richiesta GET sia sicura. Tuttavia, il divieto è solo “NON DEVE” … tecnicamente, l’HTTP consente comunque a richieste GET di generare un’azione che non è strettamente basata sul “recupero”.

Naturalmente, da un punto di vista semantico l’uso di un metodo chiamato GET per eseguire un’azione diversa da “ottenere” una risorsa non ha molto senso.

Quando un corpo di quadro GET è completamente sbagliato

Per quanto riguarda l’idempotenza, la specifica dice:

I metodi possono anche avere la proprietà di “idempotenza” in quanto (a parte problemi di errore o scadenza) gli effetti collaterali di N> 0 richieste identiche sono gli stessi di una singola richiesta. I metodi GET, HEAD, PUT e DELETE condividono questa proprietà.

Ciò significa che un metodo GET non deve avere effetti collaterali diversi per più richieste per la stessa risorsa. Quindi, indipendentemente dal corpo dell’ quadro presente come parte di una richiesta GET, gli effetti collaterali devono essere sempre gli stessi. In parole povere ciò significa che se si invia un GET con un corpo quadro 100 volte il server non può creare 100 nuove risorse. Se inviato una volta o 100 volte la richiesta deve avere lo stesso risultato. Ciò limita fortemente l’utilità del metodo GET per l’invio di corpi di entity framework.

In caso di dubbio, ricorrere sempre ai test di sicurezza / idempotenza quando si valuta l’efficacia di un metodo e i suoi effetti collaterali risultanti.

In caso di metodo GET

  1. Aggiunge i dati di forma nell’URL in coppie nome / valore e la lunghezza dell’URL è limitata (3000 caratteri).
  2. Il contenuto del file non può essere inserito in un parametro URL utilizzando un modulo. Utilizza POST
  3. Nel metodo Get, il valore dell’azione, aggiunge un `? ‘ ad esso, quindi aggiunge il set di dati del modulo, codificato utilizzando il tipo di contenuto “application / x-www-form-urlencoded”. L’agente utente attraversa quindi il collegamento a questo URI. In questo scenario, i dati del modulo sono limitati ai codici ASCII .

Quindi, quel caricamento di file non è ansible nel metodo GET

In Case c’è bisogno di usare $_GET['input_name'] con il metodo post in PHP basta passare i parametri in azione come