Saltar al contenido

Métodos HTTP

HTTP (Protocolo de Transferencia de Hipertexto) fue creado para proporcionar comunicación entre los clientes y el servidor. Funciona con un modelo de solicitud-respuesta.

Hay dos métodos HTTP básicos: GET y POST.

Método GET

El método GET solicita datos de una fuente especificada. Las solicitudes GET pueden almacenarse en caché y permanecer en el historial del navegador. También pueden guardarse como marcadores.

Nunca debe usarse para datos sensibles. Las solicitudes GET tienen restricciones de longitud y solo deben usarse para obtener datos.

DANGER

Las cadenas de consulta (pares nombre/valor) se envían en la URL de la solicitud GET.

Ejemplo de un input type text con el método get

html
<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <form action="/form/submit" method="get">
      First name:
      <input type="text" name="username" placeholder="Your name" />
      <br />
      <br />
      <input type="submit" value="Submit" />
    </form>
  </body>
</html>

Método POST

El método POST envía datos para que se procesen a una fuente especificada. A diferencia del método GET, las solicitudes POST nunca se almacenan en caché, no permanecen en el historial del navegador y no pueden guardarse como marcadores. Además, las solicitudes POST no están sujetas a restricciones de longitud de la URL, aunque normalmente los servidores imponen sus propios límites de tamaño del cuerpo.

DANGER

Las cadenas de consulta (pares nombre/valor) se envían en el cuerpo del mensaje HTTP de la solicitud POST.

Ejemplo de un formulario con el método "post"

html
<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <form action="/form/submit" method="post">
      First name:
      <input type="text" name="username" placeholder="Your name" />
      <br /><br />
      <input type="submit" value="Submit" />
    </form>
  </body>
</html>

Comparación de los métodos GET y POST

FeatureGETPOST
Back button/ReloadHarmlessReloading the page will resubmit the form data. The browser must warn that the data will be re-submitted in this case.
Can be BookmarkedYesNo
Can be cachedYesNo
Encoding Typeapplication/x-www-form-urlencodedapplication/x-www-form-urlencoded or multipart/form-data
HistoryRemains in browser history.Doesn't remain in browser history.
Data Length RestrictionsWhile sending data, GET method adds the data to the URL. The URL length is limited (maximum URL length is 2048 characters).Doesn't have URL length restrictions, though servers typically enforce body size limits.
Data Type RestrictionPrimarily ASCII characters, though UTF-8 is supported via percent-encoding.Doesn't have restrictions. Binary data is also allowed.
SecurityLess secure than POST, as the data sent is part of the URL.POST is more secure than GET, as data is not visible in the URL or browser history. However, both transmit data in plaintext over HTTP and require HTTPS for actual security.
VisibilityData is visible to everyone in the URL.Doesn't show data in the URL.

Note HTML forms natively only support GET and POST methods. To use PUT, PATCH, or DELETE with forms, you typically need JavaScript or backend routing to simulate these methods.

Otros métodos de solicitud HTTP

Además de los métodos GET y POST, hay otros métodos. Véalos a continuación:

MethodDescription
HEADIt is the same as the GET method, but returns only HTTP headers, not the document body.
OPTIONSIt returns HTTP methods that are supported by the server.
CONNECTIt converts the request connection to a transparent TCP/IP tunnel.

Método Put

El método PUT se usa principalmente para operaciones de actualización. En otras palabras, con este método, colocamos una URL de recurso de destino en el cuerpo de la solicitud, que contiene la representación del recurso original que se ha actualizado recientemente. Este método también puede usarse para generar un recurso cuando el ID del recurso lo elige el cliente, no el servidor.

Tenga en cuenta que PUT no se considera un método seguro porque puede crear o cambiar el estado en el servidor, pero sí es idempotente. Esto significa que si crea o modifica el recurso con este método y luego realiza la misma llamada por segunda vez, el recurso seguirá allí con el mismo estado que tenía la primera vez.

El siguiente ejemplo solicita al servidor que guarde el cuerpo de entidad dado en method.py en la raíz del servidor:

HTTP Methods - Put Method example

http
PUT /method.py HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.w3docs.com
Accept-Language: en-us
Connection: Keep-Alive
Content-Type: text/html
Content-Length: 160

Después de almacenar el cuerpo de entidad dado en el archivo, el servidor enviará la siguiente respuesta:

HTTP Methods - Put Method example2

http
HTTP/1.1 201 Created
Date: Tue, 13 Dec 2019 14:53:57 GMT
Server: Apache/2.2.14 (Win32)
Content-Type: text/html
Content-length: 40
Connection: Closed

Método Patch

El método PATCH se usa principalmente para operaciones de modificación. No necesita el recurso completo. Solo necesita contener los cambios del recurso. Este método no es ni idempotente ni seguro. Las colisiones entre dos solicitudes PATCH pueden ser muy peligrosas, ya que algunos formatos de parche necesitan una operación a partir de un punto base compartido; de lo contrario, el recurso se corromperá.

Método Delete

Como puede imaginar, este método se usa para eliminar un recurso identificado por una URL. Este método también es idempotente. Al eliminar un recurso, este se elimina. Llamar a DELETE varias veces produce el mismo resultado: el recurso permanece eliminado.

El siguiente ejemplo solicita al servidor que elimine el archivo method.py, en la raíz del servidor:

Delete Method Request

http
DELETE /method.py HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.w3docs.com
Accept-Language: en-us
Connection: Keep-Alive

Después de eliminar el archivo, el servidor enviará la siguiente respuesta:

Delete Method Response

http
HTTP/1.1 200 OK
Date: Tue, 13 Dec 2019 14:53:57 GMT
Server: Apache/2.2.14 (Win32)
Content-Type: text/html
Content-length: 20
Connection: Closed

Práctica

Which of the following are valid HTTP methods according to the content of the provided URL?

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.