2009-07-31 12 views
36

Soy nuevo en la programación web y solo tengo curiosidad por saber cómo obtener y publicar métodos para enviar datos de una página a otra.¿Por qué el método GET es más rápido que POST en HTTP?

Se dice que el método Get es más rápido que Post pero no sé por qué es una razón que pude encontrar es que Get solo puede llevar 255 caracteres. ¿Hay alguna otra razón, por favor alguien me explique?

+9

Debe elegir GET versus POST en función de si la acción tiene efectos secundarios, no una diferencia de rendimiento percibida. – Draemon

Respuesta

38

No se trata de velocidad. Hay muchos casos en los que POST es más aplicable. Por ejemplo, los motores de búsqueda indexarán las URL GET y los navegadores pueden marcarlos y hacer que aparezcan en el historial. Como resultado, si realiza acciones como modificar un DB basado en una solicitud GET, podría ser dañino ya que algunos bots también podrían atravesar el URL.

El otro caso puede ser un problema de seguridad. Si publica credenciales mediante GET, aparecerá en el historial del navegador y en los archivos de registro del servidor.

+0

cómo funcionan estos métodos hay algún tipo de serialización utilizada para almacenar valores y luego deserialización para obtener los datos almacenados. –

+1

Para el envío simple de formularios, ambos se basan en pares clave de valores. GET inserta aquellos en la URL misma (cadena de consulta) y POST lo envía en el cuerpo de la solicitud. –

+0

Luego hay problemas con la longitud de la URL. Incluso si está realizando una acción que de otro modo podría ser un GET (como una simple búsqueda de búsqueda), está limitado por la longitud permitida por GET y podría verse forzado a elegir POST. – demongolem

9

Mirando el protocolo http, POST o GET debería ser igual de fácil y rápido para analizar. Yo diría que no hay diferencia de rendimiento.

Echa un vistazo a las cabeceras HTTP primas

HTTP GET

GET /index.html?userid=joe&password=guessme HTTP/1.1 
Host: www.mysite.com 
User-Agent: Mozilla/4.0 

HTTP Post

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 

Desde mi punto de vista, el rendimiento no debe ser considerado cuando comparando GET y POST.

+7

GET es menos paquetes que POST. Lo que se muestra en tu ejemplo. Siempre empaqueta si es menor, luego más rápido de procesar. Los paquetes más grandes, incluso en un solo byte es, al menos en algún lugar de memor/cpu su implementación adicional. Entonces, comparando GET o POST, diría que de acuerdo con el tamaño del paquete, GET será más rápido. – YumYumYum

+0

@YumYumYum +1. ¡En mi GET aplicado es 2 veces más rápido que POST! –

0

POST crecer sus cabeceras más, sólo lo que es más grande, pero la diferencia debería ser insignificante en realidad, así que no veo por qué esto debería ser una preocupación.

Sólo tener en cuenta que la forma correcta de hablar HTTP GET es utilizar solamente para las acciones y de destino para los datos. No es necesario, pero tampoco desea tener un caso en el que los bots de Google puedan, por ejemplo, insertar, eliminar o manipular datos que solo estaban destinados a ser manejados por un humano simplemente porque están siguiendo los enlaces que encuentra .

+0

Esto no es del todo cierto. Para aclarar: GET está destinado a ser idempotente y generalmente no tiene cuerpo. POST no es necesariamente idempotente y generalmente tiene un cuerpo. Tenga en cuenta que digo que GET "generalmente" no tiene cuerpo porque la especificación HTTP no lo permite (IIRC) pero la mayoría de los servidores probablemente lo ignorarán. – Tom

24

Hay varios conceptos erróneos acerca de GET y POST en HTTP. Hay una diferencia principal: GET debe ser idempotente, mientras que POST no tiene que serlo. Lo que esto significa es que obtiene no causan efectos secundarios, es decir, puedo enviar un GET a una aplicación web tantas veces como quiero (piensa pulsando Ctrl + R o F5 muchas veces) y las solicitudes será 'seguro'

No puedo hacer eso con POST, un POST puede cambiar los datos en el servidor. Por ejemplo, si pido un artículo en la web, el artículo debe agregarse con un mensaje POST porque el estado se modificó en el servidor, la cantidad de elementos que agregué aumentó en 1. Si lo hice con un mensaje POST y pulso actualizar en el navegador el navegador me avisa, si lo hago con un GET, el navegador simplemente enviará la solicitud.

En el servidor GET vs POST es pura convención, es decir, que es mi responsabilidad como desarrollador garantizar que codifique la POST en el servidor a no repita la llamada. Hay varias formas de hacerlo, pero esa es otra pregunta.

Para contestar la pregunta en realidad si uso GET o POST para realizar la misma tarea que no hay diferencia de rendimiento.

Puede leer el RFC (http://www.w3.org/Protocols/rfc2616/rfc2616.html) para más detalles.

+0

Gracias por su sugerencia de que se usa POST para que no se pueda repetir la llamada en el servidor. –

+0

Eso no es lo que dijo franco, la publicación PODRÍA dar como resultado cambios, sin embargo, no hay garantía de que la publicación cambie nada, podría ser porque publicar datos es más óptimo para el caso de uso que usar la url, no hay una regla obligatoria que los estados publiquen algo cambia –

7

Deberías pensar en GET como "un lugar para ir", y POST como "hacer algo". Por ejemplo, un formulario de búsqueda debe enviarse usando GET porque la página de resultados de búsqueda es un "lugar" y el usuario querrá marcarlo o recuperarlo de su historial en una fecha posterior. Si envía el formulario usando POST, el usuario solo puede volver a crear la página enviando el formulario nuevamente. Por otro lado, si realizara una acción, como hacer clic en un botón Eliminar, no le gustaría enviar esto con GET, ya que la acción se repetiría cada vez que el usuario regresara a la URL.

39

Otra cosa sobre http post es que pueden ser 2 llamadas cuando se usa el encabezado http Expect: 100-Continue. El primer navegador envía las cabeceras de la publicación http y las respuestas del servidor con "HTTP 100 Continue". Cuando el navegador recibe esto, envía el cuerpo real.

http://omaralzabir.com/atlas_2__http_post_is_slower_and_it_s_default_in_atlas/

creo que esta es la respuesta que el autor buscaba.

+1

Esta es definitivamente la respuesta que estaba buscando. ¡Gracias! – nrodic

+0

chicos, ** ¿estás seguro **? ¿Dos solicitudes? Es una tontería! https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods. Para el método GET, los datos solo se pueden transferir en la sección 'query' del encabezado de una solicitud. Para solicitudes POST: los datos se transmiten en el cuerpo de la solicitud, y cuando envía datos usando 'Content-Type = application/x-www-form-urlencoded', las solicitudes tendrán casi el mismo tamaño (en la mayoría de los casos - POST es más grande). Pero la diferencia es ** insignificante **, menos de milisegundos por cada 10 000 solicitudes ... – maxkoryukov

1

GET es ligeramente más rápido porque los valores se envían en la cabeceraa diferencia de la POSTAL los valores se envían en la solicitud cuerpo, en el formato que especifica el tipo de contenido.

Por lo general, el tipo de contenido es application/x-www-form-urlencoded, por lo que el cuerpo de la petición utiliza el mismo formato que la cadena de consulta:

parámetro = valor & también = otra Cuando se utiliza una carga de archivos en el formulario, utiliza la codificación multipart/form-data, que tiene un formato diferente. Es más complicado.

1

Estoy de acuerdo con otras respuestas, pero no se mencionó que las solicitudes GET se pueden almacenar en caché, mientras que las solicitudes POST nunca se almacenan en caché. Creo que esta es la razón principal por la cual una solicitud GET se realiza más rápido. (De-gruesa, esto significa que a veces no hay petición se envía realmente ahí que en realidad no es la solicitud GET que es más rápido, pero la caché del navegador..)

métodos HTTP: GET vs. POST: http://www.w3schools.com/tags/ref_httpmethods.asp

5

Justo mis pocos centavos de 2016.

Estoy creando un sistema de mensajes simple. Al principio usé POST para recibir nuevas alertas. En jQuery tuve:

$.post('/a/alerts', 'stamp=' + STAMP, function(result) 
{ 
}); 

Y en PHP utilicé $ _POST ['stamp']. Incluso desde localhost obtuve 90-100 ms por cada solicitud como esta. simplemente he cambiado:

$.get('/a/alerts?stamp=' + STAMP, function(result) 
{ 
}); 

y en PHP cambió a $ _GET [ 'sello']. Entonces un poco menos de 1 minuto de cambios. Ahora cada solicitud toma 30-40 ms.

Entonces GET puede ser el doble de rápido que POST. Por supuesto que no siempre, pero para pequeñas cantidades de datos obtengo los mismos resultados todo el tiempo.

Cuestiones relacionadas