¿Cuál es la diferencia entre POST y GET?

Recientemente me he involucrado con PHP / AJAX / jQuery y me parece que una parte importante de estas tecnologías es POST y GET .

Primero, ¿cuál es la diferencia entre POST y GET ? A través de la experimentación, sé que GET agrega las variables de retorno y sus valores a la cadena URL

 website.com/directory/index.php?name=YourName&bday=YourBday 

pero POST no.

Entonces, ¿es esta la única diferencia o existen reglas o convenciones específicas para usar una u otra?

En segundo lugar, también he visto POST y GET fuera de PHP: también en AJAX y jQuery. ¿Cómo difieren POST y GET entre estos 3? ¿Son la misma idea, la misma funcionalidad, simplemente utilizada de manera diferente?

GET y POST son dos tipos diferentes de solicitudes HTTP.

De acuerdo con Wikipedia :

GET solicita una representación del recurso especificado. Tenga en cuenta que GET no debe usarse para operaciones que causan efectos secundarios, como su uso para realizar acciones en aplicaciones web. Una razón para esto es que GET puede ser usado arbitrariamente por robots o rastreadores, que no deberían tener que considerar los efectos secundarios que una solicitud debería causar.

y

POST envía los datos para ser procesados ​​(por ejemplo, desde un formulario HTML) al recurso identificado. Los datos están incluidos en el cuerpo de la solicitud. Esto puede dar como resultado la creación de un nuevo recurso o las actualizaciones de los recursos existentes o ambos.

Entonces, esencialmente GET se usa para recuperar datos remotos, y POST se usa para insertar / actualizar datos remotos.


La especificación de HTTP / 1.1 (RFC 2616) sección 9 Definiciones de métodos contiene más información sobre GET y POST , así como otros métodos HTTP, si está interesado.

Además de explicar los usos previstos de cada método, la especificación también proporciona al menos una razón práctica de por qué GET solo debe utilizarse para recuperar datos:

Los autores de los servicios que utilizan el protocolo HTTP NO DEBEN utilizar formularios basados ​​en GET para el envío de datos confidenciales, ya que esto codificará los datos en el URI de solicitud. Muchos servidores, proxies y agentes de usuario existentes registrarán el URI de solicitud en algún lugar donde pueda ser visible para terceros. Los servidores pueden usar el envío de formulario basado en POST en su lugar


Finalmente, una consideración importante cuando se usa GET para solicitudes AJAX es que algunos navegadores, IE en particular, almacenarán en caché los resultados de una solicitud GET . Entonces, si usted, por ejemplo, encuesta utilizando la misma solicitud GET siempre obtendrá los mismos resultados, incluso si los datos que está consultando se están actualizando en el servidor. Una forma de aliviar este problema es hacer que la URL sea única para cada solicitud agregando una marca de tiempo.

Un POST , a diferencia de un GET , generalmente tiene información relevante en el cuerpo de la solicitud. (Un GET no debe tener un cuerpo, así que aparte de las cookies, el único lugar para pasar información está en la URL). Además de mantener la URL relativamente limpia, POST también le permite enviar mucha más información (ya que las URL tienen una longitud limitada, todos los propósitos prácticos), y le permite enviar casi cualquier tipo de datos (los formularios de carga de archivos, por ejemplo, no pueden usar GET – tienen que usar POST más un tipo de contenido especial / encoding).

Aparte de eso, un POST connota que la solicitud cambiará algo, y no debe volverse a hacer de cualquier manera. Es por eso que a veces ve que su navegador le pregunta si desea volver a enviar los datos del formulario cuando presiona el botón “volver”.

GET , por otro lado, debe ser idempotente , lo que significa que puede hacerlo un millón de veces y el servidor hará lo mismo (y mostrará básicamente el mismo resultado) todas y cada una de las veces.

Aprende el subyacente protocolo HTTP

Esto es similar a conducir un automóvil. Usted se compra un automóvil y sale a la carretera, pero no conoce ninguno de los letreros, luces u otras reglas que debe obedecer. Obviamente, no puede conducir aunque sepa cómo manejar un automóvil. Al menos no de forma segura. No para ti, ni para ti.

Deberías aprender un poco sobre el protocolo HTTP. GET / POST no están relacionados (al menos no directamente) con PHP / AJAX / jQuery o similar. Los usan porque están usando el protocolo HTTP para la comunicación. Y hay mucho más para el protocolo HTTP que solo GET y POST .

Vea algunos de estos y luego busque por su cuenta también:

  • wikipedia
  • W3C
  • HTTP hecho realmente fácil

Si bien no es una descripción de las diferencias, a continuación hay un par de cosas en las que pensar al elegir el método correcto.

  • Las solicitudes GET pueden ser almacenadas en caché por el navegador, lo que puede ser un problema (o beneficio) cuando se utiliza ajax.
  • Las solicitudes GET exponen parámetros a los usuarios (POST también, pero son menos visibles).
  • POST puede pasar mucha más información al servidor y puede tener casi cualquier longitud.

POST y GET son dos métodos de solicitud HTTP . GET generalmente está destinado a recuperar algunos datos, y se espera que sea idempotente (repetir que la consulta no tiene ningún efecto secundario) y solo puede enviar cantidades limitadas de datos de parámetros al servidor. Las solicitudes GET a menudo se almacenan en caché de forma predeterminada en algunos navegadores si no tiene cuidado.

POST está diseñado para cambiar el estado del servidor. Transporta más datos, y se permite (y, a menudo, se espera) que la repetición de la consulta tenga efectos secundarios, como la creación de dos mensajes en lugar de uno.

Si está trabajando RESTfully , GET debe usarse para solicitudes en las que solo está obteniendo datos, y POST debe usarse para solicitudes en las que está haciendo que algo suceda.

Algunos ejemplos:

  • OBTENGA la página que muestra una pregunta de SO en particular

  • Publicar un comentario

  • Envíe una solicitud POST haciendo clic en el botón “Agregar al carrito”.

Con POST también puede hacer una encoding mime de varias partes, lo que significa que también puede adjuntar archivos. Además, si utiliza variables de publicación en la navegación de páginas, el usuario recibirá una advertencia preguntándole si desea volver a enviar el parámetro de publicación. Por lo general, tienen el mismo aspecto en una solicitud HTTP, pero debe seguir con POST si necesita “ENVIAR” algo EN UN servidor y “OBTENER” si necesita OBTENER algo de un servidor, ya que esa era la intención.

La única “gran” diferencia entre POST y GET (al usarlos con AJAX) es que GET es una URL proporcionada, están limitadas en cuanto a su longitud (ya que la URL no tiene una longitud infinita).