Pregunta

Varias de mis aplicaciones ajax en el pasado han usado la solicitud GET, pero ahora estoy empezando a usar la solicitud POST. Las solicitudes POST parecen ser un poco más seguras y definitivamente más amigables / bonitas. Por lo tanto, me pregunto si hay alguna razón por la que debería usar la solicitud GET.

¿Fue útil?

Solución

Generalmente configuro la pregunta de esta manera: ¿Cambia algo importante después de la solicitud? (No obstante, el registro y similares) Si lo hace, debería ser una solicitud POST, si no lo hace, debería ser una solicitud GET.

Me alegra que llame a las solicitudes POST '' ligeramente '' más seguro, porque eso es más o menos lo que son; Es trivial falsificar una solicitud POST de un usuario a una página. Sin embargo, al hacer una solicitud POST, se evita que los aceleradores web o las recargas vuelvan a activar la acción accidentalmente.

Como AJAX, hay una consideración más: si está devolviendo JSON con soporte de devolución de llamada, tenga mucho cuidado de no poner ningún dato confidencial que no desee que otros sitios web puedan ver allí. Wikipedia tenía una vulnerabilidad en este sentido en la que el token anti-CSRF del usuario se revelaba a través de su API JSON.

Otros consejos

Debería usar GET cuando realiza una solicitud que no tiene efectos secundarios, p. solo buscando algo de información. Esta solicitud puede:

  • Se repite sin ningún problema: si el navegador detecta un error, puede volver a intentarlo en silencio
  • Tener su resultado en caché por el navegador
  • Ser almacenado en caché por un proxy

Estas cosas están todas bien. Cualquier cosa que solo esté recuperando datos (particularmente datos públicos) realmente debería ser un GET. El servidor debe enviar encabezados sensibles de Última modificación: y caduca: para permitir el almacenamiento en caché si es necesario.

Todos los puntos buenos, sin embargo, en respuesta a la pregunta, las solicitudes GET son más útiles en ciertos escenarios que las solicitudes POST:

  1. Se pueden marcar como favoritos
  2. Se pueden almacenar en caché
  3. Son más rápidos
  4. Han conocido las consecuencias (suponiendo que no cambian los datos), por lo que visitarlos múltiples veces no es un problema.

En aras de la posteridad, la actualización de este comentario con las notas del blog sobre el punto # 3 aquí, todo el crédito a Omar AL Zabir (el autor de la referenciada publicación de blog ):

  

" Atlas por defecto realiza HTTP POST para todas las llamadas AJAX. Http POST es   más caro que Http GET. Transmite más bytes a través del cable,   por lo tanto, toma un tiempo valioso en la red y también hace que ASP.NET haga más   procesamiento en el servidor final. Por lo tanto, debe usar Http Get tanto como   posible. Sin embargo, Http Get no le permite pasar objetos como   parámetros Puede pasar numérico, cadena y fecha solamente. Cuando haces   una llamada Http Get, Atlas construye una url codificada y da un golpe a esa   url. Por lo tanto, no debe pasar demasiado contenido que hace que la URL se convierta   más grande que 2048 caracteres. Hasta donde yo sé, eso es lo máximo   longitud de cualquier url.

     

Otra cosa mala de la publicación http es que en realidad son 2 llamadas. primero   el navegador envía los encabezados de publicación http y el servidor responde con "HTTP 100   Continuar". Cuando el navegador recibe esto, envía el cuerpo real. & Quot;

Esto podría ayudarlo a decidir dónde usar GET y dónde usar POST:

URI, direccionamiento y el uso de HTTP GET y POST .

Hay otra diferencia no mencionada por nadie.

Las solicitudes GET se pasan en la cadena URL y, por lo tanto, están sujetas a un límite de longitud que generalmente depende del navegador.

Las solicitudes POST pueden ser mucho más grandes, de hecho, en realidad no están limitadas. Entonces, si necesita solicitar datos de un servidor web y pasa mucha información de parámetros, entonces una solicitud POST podría ser la única opción.

Entonces, como se mencionó anteriormente, realmente una solicitud GET es para solicitar datos (sin efectos secundarios), mientras que una solicitud POST se usa generalmente para transmitir datos al servidor para ser almacenados (con efectos secundarios). p.ej. Use POST para cargar un archivo. OBTENER para recuperar un archivo.

Hubo un momento en que IE creo que tenía una cadena de URL GET muy corta. Algunas aplicaciones, como Lotus Notes, utilizan grandes cantidades de caracteres aleatorios para representar las identificaciones de documentos. Me desagradaba usar otro producto que generaba cadenas aleatorias, por lo que la URL de la página era única cada vez. La cadena aleatoria era ENORME ... y no siempre funcionaba con IE6 de memoria.

Las solicitudes POST son tan inseguras como las GET. La principal diferencia es que POST se utiliza para modificar el estado de la aplicación del servidor, mientras que GET solo le solicita datos.

La diferencia es importante cuando usas clean, " restful " URL, donde la propia URL especifica el recurso, y los diferentes métodos desencadenan diferentes acciones en el lado del servidor.

Quizás lo más importante es que GET se puede marcar / ver en el historial de URL y se puede buscar con Google.

POST es importante cuando no quiere que el evento se marque como favorito o se pueda escribir como una URL; de lo contrario, usted (o Google rastrea sus URLS) podría terminar haciendo cosas como eliminar usuarios de su sistema, por ejemplo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top