2009-04-03 28 views
67

¿Cuál es la diferencia entre GET y POSTAL para Ajax solicitudes?GET vs POST en Ajax

No veo ninguna diferencia entre esos dos, excepto que cuando uso GET, los parámetros se envían en URL, que para mí realmente no hacen ninguna diferencia, ya que todas las solicitudes se hacen en segundo plano y el usuario no encuentra ninguna diferencia.

edición: ¿Cuáles son PONER y BORRAR métodos utilizados para?

+7

BTW, también se ponen y eliminar las solicitudes, además de POST peticiones. Deberías preguntar sobre esos, también. –

+1

Para futuros lectores: aquí hay una [pregunta relacionada por Fooker hace un año] (http://stackoverflow.com/q/18395523/4043409). – Gideon

Respuesta

129

GET está diseñado para obtener datos del servidor. POST (y los amigos menos conocidos PUT y DELETE) están diseñados para modificar datos en el servidor.

Una solicitud GET nunca debe hacer que se eliminen datos de una aplicación. Si tiene un enlace, puede hacer clic con un GET para eliminar datos, y luego, al hacer un seguimiento de su sitio, puede hacer clic en todos sus enlaces "Eliminar".

La respuesta canónica se puede encontrar here, que cita el HTML 2.0 especificaciones:

Si el procesamiento de un formulario es idempotente (es decir, que no tiene efecto observable duradero sobre el estado del mundo ) , entonces el método de formulario debe ser GET. Muchas búsquedas en bases de datos no tienen efectos secundarios visibles y hacen que las solicitudes de formularios de consulta sean ideales.

Si el servicio asociado con el procesamiento de una forma tiene efectos secundarios (por ejemplo, la modificación de una base de datos o suscripción a un servicio ), el método debe ser POST.

En su llamada AJAX, debe utilizar cualquier método que admita su servidor. Siempre debe diseñar su servidor para que las operaciones que modifican datos sean llamadas por POST/PUT/DELETE. Otros comentarios tienen enlaces a REST, que generalmente asigna C/R/U/D a "POST o PUT" (Crear)/GET (Leer)/PON (Actualizar)/BORRAR (Eliminar).

+6

+1: Definición esencial de GET - idempotencia. Todos los cambios deben ocurrir con POST, PUT y DELETE. –

+0

mi servidor está dando error 403 si envío el formulario usando la publicación, get está trabajando. Creo que esto se debe a la configuración del servidor. No tengo acceso al servidor. ¿Cómo evitarlo? –

+0

Estoy de acuerdo con @ S.Lott. Definición totalmente agradable y completa del método GET./clap mate. –

24

Si envía grandes cantidades de datos o datos confidenciales a través de HTTPS, querrá usar POST. Si es solo un parámetro simple, usaría GET.

Las solicitudes GET tienen un límite en la cantidad de datos que se pueden enviar. Olvidé el número exacto, pero esto puede causar problemas si envía algo sustancial.

Básicamente la diferencia entre GET y POST es que en una solicitud GET, los parámetros se pasan en la URL donde, como en una POST, los parámetros se incluyen en el cuerpo del mensaje.

+2

sí, es importante señalar que existen limitaciones de tamaño asociadas con GET y que son diferentes según el software del cliente y del servidor –

19

Si su AJAX o no es irrelevante. Es sobre la acción que estás tomando. Yo recomendaría seguir los principios de REST. Que tienen otras disposiciones para actualizar, eliminar, etc ...

+3

+1: los principios RESTful son esenciales. –

3

Muchos servidores web limitan la longitud de los datos que se pueden pasar como parte de la URL, por lo que la solicitud GET puede romperse de maneras extrañas que son difíciles de depurar .También, la mayoría del software de servidor registra direcciones URL en los registros de acceso, por lo que si transfiere información confidencial (como contraseñas) en una solicitud GET, con toda probabilidad se escribirá en disco en texto sin formato.

Desde una perspectiva REST, las solicitudes GET no deberían tener efectos secundarios, no deberían modificar los datos. Entonces, si solo está OBTENIENDO un recurso por ID, esto tiene sentido, pero si está realizando cambios en un recurso, debe usar PUT, POST o UPDATE para el verbo http.

-2

Si está transmitiendo cualquier argumento con caracteres que pueden desordenarse en la URL (como espacios), utiliza POST. De lo contrario, puedes usar GET.

Por lo general, si solo está transmitiendo unos pocos argumentos, debería usar GET. Pero para pasar información enviada por el usuario, como entradas de blog, texto, etc., es una buena práctica usar POST.

También hay ciertos marcos que dependen completamente de URLs basado segmento (como site.com/products/133 en lugar de site.com/products.php?id=333 y estos marcos no definidas las variables GET para la seguridad. En tales casos se usaría la POST allt el tiempo.

0

La diferencia es la misma entre GET y POST ya sea que esté usando Ajax, HTML form s, o curl Aquí están las definiciones pertinentes:.

1

Sobre mí, prefiero POST. Me reservo llegar a los eventos que sé que el valor enviado se limita a los datos que tengo el "control", por ejemplo, para recuperar un elemento con una identificación. Ejemplo, "getitem? Id = 123", "deleteImtem? Id = 123", ... Para los otros casos, cuando tengo un formulario rellenable por un usuario, prefiero POST.

Como dijo Ryan Smith, es mejor usar POST para enviar una gran cantidad de datos, y menos conocimientos en el caso de que se use en otros idiomas/caracteres especiales (en general, todas las especialidades de javascript framework no deberían tener ningún problema lidiar con eso, pero creo que hay menos razones para usar POST).

Para la perspectiva REST, en mi opinión, puede usar esto con un proyecto nuevo (para mantener la consistencia con todo el proyecto).

Finalmente, quizás algunos programas utilizados en una red (URL loguers (es decir: para ver si los empleados perdieron su tiempo en sitios no autorizados, ...) proxys, ...) o cualquier otro tipo de herramienta puede interceptar la consulta Somes mostrará en los informes los parámetros que ha enviado con GET, considerándolo como una página web diferente. Pero en esta situación, no podría ser su problema, ¡se trata de cambios de un proyecto a otro! ;)

4

Las solicitudes GET son más fáciles de explotar en los ataques CSRF (falsificación de solicitudes entre sitios). A saber, las solicitudes POST falsas requieren que Javascript esté habilitado en el lado del usuario, mientras que las solicitudes GET falsas todavía son posibles solo con img, etiquetas de script.

0

Primero, información general. Use GET si solo lee datos, use POST si cambia algo en la base de datos, archivos txt, etc.

Pero el problema es que algunos navegadores caché GET resultados. Tuve problemas con las solicitudes AJAX en IE7, pero finalmente descubrí que el navegador almacena en caché GET resultados.Repensé el flujo y cambio mi solicitud al POST.

Por lo tanto, no use GET si no desea almacenar en caché.

(por supuesto se puede desactivar el almacenamiento en caché en las operaciones GET. Pero yo no lo prefieren)

2

Ambos se utilizan para enviar datos y recibir algún tipo de respuesta utilizando esos datos.

OBTENER: Obtener almacén de información en el servidor. Es decir. Búsqueda, tweet, información de la persona. Si desea enviar información, obtenga la solicitud de envío de solicitud utilizando process.php? Name = subroto , por lo que básicamente envía información a través de la url. Url no puede manejar más de 2083 char. Entonces, ¿puede recordar que no es posible para una publicación de blog?

POST: Publicar hacer lo mismo que obtener. Registro de usuario, inicio de sesión de usuario, envío de Big Data, publicación de blog. Si necesita enviar información segura, utilice la publicación o big data, ya que no pasa por la url.

AJAX: $ .get() y $ .post() contienen características que son subconjuntos de $ .ajax(). Tiene mucha configuración.

método $ .get(), que es una especie de abreviatura de $ .Ajax(). Cuando se usa $ .get(), en lugar de pasar un objeto, se pasan argumentos. Como mínimo, necesitará los dos primeros argumentos, que son la URL del archivo que desea recuperar (es decir, 'test.txt') y una devolución de llamada exitosa.

Resumen:

$.get(url [, data ] [, success ] [, dataType ]) 
$.post(url [, data ] [, success ] [, dataType ]) // for sending secure or Large information 
$.ajax(url [, settings ]) // More Configaration