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
<!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"
<!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
| Feature | GET | POST |
|---|---|---|
| Back button/Reload | Harmless | Reloading the page will resubmit the form data. The browser must warn that the data will be re-submitted in this case. |
| Can be Bookmarked | Yes | No |
| Can be cached | Yes | No |
| Encoding Type | application/x-www-form-urlencoded | application/x-www-form-urlencoded or multipart/form-data |
| History | Remains in browser history. | Doesn't remain in browser history. |
| Data Length Restrictions | While 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 Restriction | Primarily ASCII characters, though UTF-8 is supported via percent-encoding. | Doesn't have restrictions. Binary data is also allowed. |
| Security | Less 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. |
| Visibility | Data is visible to everyone in the URL. | Doesn't show data in the URL. |
Note HTML forms natively only support
GETandPOSTmethods. To usePUT,PATCH, orDELETEwith 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:
| Method | Description |
|---|---|
| HEAD | It is the same as the GET method, but returns only HTTP headers, not the document body. |
| OPTIONS | It returns HTTP methods that are supported by the server. |
| CONNECT | It 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
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: 160Después de almacenar el cuerpo de entidad dado en el archivo, el servidor enviará la siguiente respuesta:
HTTP Methods - Put Method example2
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: ClosedMé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
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-AliveDespués de eliminar el archivo, el servidor enviará la siguiente respuesta:
Delete Method Response
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: ClosedPráctica
Which of the following are valid HTTP methods according to the content of the provided URL?