Prueba de seguridad: solicitud HTTP
Solicitudes HTTP
Un cliente HTTP envía una solicitud HTTP a un servidor en forma de mensaje de solicitud que incluye el siguiente formato:
Una línea de solicitud
Cero o más campos de encabezado (General | Solicitud | Entidad) seguidos de CRLF
Una línea vacía (una línea sin nada antes del CRLF) que indica el final de los campos del encabezado
Opcionalmente un cuerpo de mensaje
La siguiente sección explica cada una de las entidades utilizadas en el mensaje HTTP.
Línea de solicitud de mensaje
La línea de solicitud comienza con un token de método, seguida de la URI de solicitud, la versión del protocolo y termina con CRLF. Los elementos están separados por caracteres SP de espacio.
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
Analicemos cada una de las partes mencionadas en Request-Line.
Métodos de solicitud
La solicitud Method indica el método realizado en el recurso identificado por el dado Request-URI. El método distingue entre mayúsculas y minúsculas y siempre debe mencionarse en mayúsculas. Los siguientes métodos son compatibles con HTTP / 1.1:
S.No. | Método y descripción |
---|---|
1 | GET Se utiliza para recuperar información de un servidor determinado mediante un URI determinado. Las solicitudes que utilizan GET solo deben recuperar datos y no deben tener ningún otro efecto en los datos. |
2 | HEAD Es igual que GET, pero solo transfiere la línea de estado y la sección de encabezado. |
3 | POST Se utiliza para enviar datos al servidor. Por ejemplo, información del cliente, carga de archivos, etc. mediante formularios HTML. |
4 | PUT Reemplaza todas las representaciones actuales del recurso de destino con el contenido cargado. |
5 | DELETE Elimina todas las representaciones actuales del recurso de destino proporcionadas por URI. |
6 | CONNECT Establece un túnel al servidor identificado por un URI determinado. |
7 | OPTIONS Describe las opciones de comunicación para el recurso de destino. |
8 | TRACE Realiza una prueba de bucle de mensajes a lo largo de la ruta al recurso de destino. |
Solicitud-URI
El Request-URI es un identificador uniforme de recursos que identifica el recurso al que se debe aplicar una solicitud. A continuación se muestran los formularios más utilizados para especificar un URI:
Request-URI = "*" | absoluteURI | abs_path | authority
S.No. | Método y descripción |
---|---|
1 | El asterisco *se utiliza cuando la solicitud HTTP no se aplica a un recurso en particular, sino al propio servidor. Solo se permite cuando el método no se aplica necesariamente a un recurso. Por ejemplo, OPTIONS * HTTP/1.1 |
2 | los absoluteURIse utiliza cuando se realiza una solicitud HTTP a un proxy. Se solicita al proxy que reenvíe la solicitud o la atienda desde un caché válido y devuelva la respuesta. Por ejemplo,GET https://www.w3.org/pub/WWW/TheProject.html HTTP/1.1 |
3 | La forma más común de Request-URI es la que se usa para identificar un recurso en un servidor de origen o puerta de enlace. Por ejemplo, un cliente que desee recuperar el recurso anterior directamente desde el servidor de origen crearía una conexión TCP al puerto 80 del host "www.w3.org" y enviaría las líneas: GET /pub/WWW/TheProject.html HTTP/1.1 Host: https://www.w3.org/ Note- La ruta absoluta no puede estar vacía. Si no hay ninguno presente en el URI original, debe indicarse como "/" (la raíz del servidor) |
Campos de encabezado de solicitud
Los campos de encabezado de solicitud permiten al cliente pasar información adicional sobre la solicitud y sobre el cliente mismo al servidor. Estos campos actúan como modificadores de solicitud y están disponibles los siguientes campos de encabezado de solicitud importantes que se pueden utilizar según los requisitos:
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Authorization
- Expect
- From
- Host
- If-Match
- If-Modified-Since
- If-None-Match
- If-Range
- If-Unmodified-Since
- Max-Forwards
- Proxy-Authorization
- Range
- Referer
- TE
- User-Agent
Puede introducir sus campos personalizados en caso de que vaya a escribir su propio cliente y servidor web personalizados.
Ejemplos de mensajes de solicitud
Ahora pongámoslo todo junto para formar una solicitud HTTP para obtener hello.htm página desde el servidor web que se ejecuta en tutorialspoint.com -
GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Aquí no estamos enviando ningún dato de solicitud al servidor porque estamos obteniendo una página HTML del plan del servidor. La conexión es un encabezado general y el resto de los encabezados son encabezados de solicitud. A continuación se muestra otro ejemplo en el que enviamos datos de formulario al servidor utilizando el cuerpo del mensaje de solicitud:
POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
licenseID = string&content = string&/paramsXML = string
Aquí, la URL dada /cgi-bin/process.cgi se usa para procesar los datos pasados y, en consecuencia, se vuelve a sintonizar una respuesta. loscontent-type le dice al servidor que los datos transmitidos son datos simples de formularios web y lengthes la longitud real de los datos incluidos en el cuerpo del mensaje. El siguiente ejemplo muestra cómo puede pasar XML del plan a su servidor web:
POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Content-Type: text/xml; charset = utf-8
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
<?xml version = "1.0" encoding = "utf-8"?>
<string xmlns = "http://clearforest.com/">string</string>