¿Cuál es la diferencia al usar GET
o POST
método? ¿Cuál es más seguro? ¿Cuáles son las (des) ventajas de cada uno de ellos?
( pregunta similar )
¿Cuál es la diferencia al usar GET
o POST
método? ¿Cuál es más seguro? ¿Cuáles son las (des) ventajas de cada uno de ellos?
( pregunta similar )
Respuestas:
No es una cuestión de seguridad. El protocolo HTTP define las solicitudes de tipo GET como idempotentes , mientras que las POST pueden tener efectos secundarios. En inglés simple, eso significa que GET se usa para ver algo, sin cambiarlo, mientras que POST se usa para cambiar algo. Por ejemplo, una página de búsqueda debe usar GET, mientras que un formulario que cambia su contraseña debe usar POST.
Además, tenga en cuenta que PHP confunde un poco los conceptos. Una solicitud POST obtiene entrada de la cadena de consulta y a través del cuerpo de la solicitud. Una solicitud GET solo recibe información de la cadena de consulta. Entonces, una solicitud POST es un superconjunto de una solicitud GET; puede usar $_GET
en una solicitud POST, e incluso puede tener sentido tener parámetros con el mismo nombre $_POST
y $_GET
que signifiquen cosas diferentes.
Por ejemplo, supongamos que tiene un formulario para editar un artículo. El ID del artículo puede estar en la cadena de consulta (y, por lo tanto, disponible a través de $_GET['id']
), pero supongamos que desea cambiar el ID del artículo. El nuevo ID puede estar presente en el cuerpo de la solicitud ( $_POST['id']
). De acuerdo, tal vez ese no sea el mejor ejemplo, pero espero que ilustre la diferencia entre los dos.
Cuando el usuario ingresa información en un formulario y hace clic en Enviar, hay dos formas en que la información se puede enviar desde el navegador al servidor: en la URL o dentro del cuerpo de la solicitud HTTP.
El método GET, que se utilizó en el ejemplo anterior, agrega pares de nombre / valor a la URL. Desafortunadamente, la longitud de una URL es limitada, por lo que este método solo funciona si solo hay unos pocos parámetros. La URL podría truncarse si el formulario usa una gran cantidad de parámetros, o si los parámetros contienen grandes cantidades de datos. Además, los parámetros pasados en la URL son visibles en el campo de dirección del navegador, no el mejor lugar para mostrar una contraseña.
La alternativa al método GET es el método POST. Este método empaqueta los pares de nombre / valor dentro del cuerpo de la solicitud HTTP, lo que lo convierte en una URL más limpia y no impone limitaciones de tamaño en la salida de los formularios. También es más seguro.
La mejor respuesta fue la primera.
Tu estas usando:
GET
también es perfectamente capaz de "enviar" datos, por lo que no es una respuesta muy precisa.
Hay dos implicaciones comunes de "seguridad" para el uso GET
. Dado que los datos aparecen en la cadena de URL, es posible que alguien que mira por encima de su hombro en la Barra de direcciones / URL pueda ver algo de lo que no debería estar al tanto, como una cookie de sesión que podría usarse para secuestrar su sesión. Tenga en cuenta que todos tienen teléfonos con cámara.
La otra implicación de seguridad GET
tiene que ver con las GET
variables que se registran en el registro de acceso de la mayoría de los servidores web como parte de la URL solicitante. Dependiendo de la situación, el clima regulatorio y la sensibilidad general de los datos, esto puede generar preocupaciones.
Algunos clientes / cortafuegos / sistemas IDS pueden desaprobar las GET
solicitudes que contienen una cantidad excesiva de datos y, por lo tanto, pueden proporcionar resultados poco confiables.
POST
admite funcionalidades avanzadas, como la compatibilidad con entradas binarias de varias partes utilizadas para la carga de archivos en servidores web.
POST
requiere un encabezado de longitud de contenido que pueda aumentar la complejidad de la implementación de un cliente específico de la aplicación, ya que el tamaño de los datos enviados debe conocerse de antemano para evitar que se forme una solicitud de cliente en un modo incremental exclusivo de paso único. Quizás un problema menor para aquellos que eligen abusar HTTP
al usarlo como un transporte RPC (Llamada a procedimiento remoto).
Otros ya han hecho un buen trabajo al cubrir las diferencias semánticas y el "cuándo" de esta pregunta.
Utilizo GET cuando recupero información de una URL y POST cuando envío información a una URL.
Debería usar POST si hay muchos datos o algún tipo de información confidencial (las cosas realmente sensibles también necesitan una conexión segura).
Use GET si desea que las personas puedan marcar su página, ya que todos los datos se incluyen con el marcador.
Solo tenga cuidado con las personas que presionan REFRESH con el método GET, porque los datos se enviarán nuevamente cada vez sin avisar al usuario (POST a veces advierte al usuario sobre el reenvío de datos).
Este documento del W3C explica el uso de HTTP GET y POST.
Creo que es una fuente autorizada.
El resumen es (sección 1.3 del documento):
- Use GET si la interacción se parece más a una pregunta (es decir, es una operación segura, como una consulta, una operación de lectura o una búsqueda).
- Use POST si:
- La interacción es más como una orden, o
- La interacción cambia el estado del recurso de manera que el usuario lo perciba (por ejemplo, una suscripción a un servicio), o
- El usuario será responsable de los resultados de la interacción.
Los métodos Get y Post no tienen nada que ver con la tecnología de servidor que está utilizando, funciona igual en php, asp.net o ruby. GET y POST son parte del protocolo HTTP. Como señaló Mark, POST es más seguro. Los formularios POST tampoco son almacenados en caché por el navegador. POST también se utiliza para transferir grandes cantidades de datos.
La razón para usar POST al realizar cambios en los datos:
Además, no coloque información confidencial en la cadena de consulta (única opción con GET) porque aparece en la barra de direcciones, marcadores y registros del servidor.
Esperemos que esto explique por qué la gente dice que POST es 'seguro'. Si está transmitiendo datos confidenciales, debe usar SSL.
GET
y POST
son métodos HTTP que pueden lograr objetivos similares
GET
es básicamente para obtener (recuperar) datos, A GET
no debe tener un cuerpo, por lo que, aparte de las cookies, el único lugar para pasar información es la URL y las URL tienen una longitud limitada, GET
es menos seguro en comparación con POST
porque los datos enviados son parte de la URL
¡Nunca lo use GET
al enviar contraseñas, tarjetas de crédito u otra información confidencial! Los datos son visibles para todos en la URL. Se pueden almacenar en caché.
GET
es inofensivo cuando estamos recargando o devolviendo el botón, estará marcado en el libro, los parámetros permanecerán en el historial del navegador, solo se permiten caracteres ASCII.
POST
puede implicar cualquier cosa, como almacenar o actualizar datos, ordenar un producto o enviar un correo electrónico. POST
El método tiene un cuerpo.
POST
El método está asegurado para pasar información confidencial y confidencial al servidor, no será visible en los parámetros de consulta en la URL y los parámetros no se guardarán en el historial del navegador. No hay restricciones en la longitud de los datos. Cuando volvamos a cargar, el navegador debe alertar al usuario de que los datos están a punto de volver a enviarse. POST
el método no puede ser marcado
Use el método GET si desea recuperar los recursos de la URL. Siempre puede ver la última página si presiona el botón Atrás de su navegador, y podría estar marcado, por lo que no es tan seguro como el método POST.
Use el método POST si desea 'enviar' algo a la URL. Por ejemplo, si desea crear una cuenta de Google y es posible que deba completar toda la información detallada, luego presione el botón 'enviar' (se llama al método POST aquí), una vez que envíe con éxito, e intente presionar el botón Atrás de su navegador , recibirá un error o un nuevo formulario en blanco, en lugar de la última página con el formulario completado.
El GET
método:
Se usa solo para enviar una fecha de 256 caracteres
Al usar este método, la información se puede ver en el navegador
Es el método predeterminado utilizado por los formularios.
No está tan asegurado.
El POST
método:
Se utiliza para enviar datos ilimitados.
Con este método, la información no se puede ver en el navegador
Puedes mencionar explícitamente el POST
método
Es más seguro que el GET
método.
Proporciona funciones más avanzadas.