Protocolo HTTP
Es un protocolo donde se debe seguir el esquema de cliente-servidor (Donde el cliente se conecta al servidor, hace una petición, y el servidor responde de acuerdo a la estructura de esa petición), luego de que el servidor procesa la petición, se cierra la conexión, aunque el cliente también la puede cerrar. Como este protocolo no es un protocolo de estado, esto es que no guarda información que haya mandado el cliente, entonces se recurre a las cookies como archivo temporal para hacer esto.
Cliente
Existe un formato estándar para la petición que realiza el cliente, así:
El crlf significa retorno de carro y avance de línea [enter]
Código
(Método) (Archivo o recurso) (Versión protocolo)(crlf) (Cabecera1)(:) (Valor)(crlf) (Cabecera2)(:) (Valor)(crlf) (CabeceraN)(:) (Valor)(crlf) (crlf) (Cuerpo del mensaje)
Metodos::
Los métodos dependen del servidor y pueden ser definidos por el programador, aunque los que se usan comúnmente o los “necesarios” por así decir son el método GET y POST. También existen varios como OPTIONS, HEAD, TRACE, PUT, pero no los vamos a tratar.
GET: Se utiliza para hacer petición de un archivo X indicado en la primera línea del formato de petición del cliente.
POST: Se utiliza para enviar datos a un archivo X indicado en la primera línea del formato de petición el cliente.
OPTIONS: Se utiliza para hacer petición al servidor de los métodos que puede usar el cliente.
Cabeceras::
Son varias las cabeceras que necesitamos para realizar una petición correctamente. Entre ellas encontramos Host, User-Agent, Accept, Accept-Charset, Keep-Alive, Connection. Cabe decir que no son necesarias las cabeceras, ya que con solo la conexión y el método podemos hacer un request a una página.
Host: Indica el nombre de la “página web” a la que queremos acceder. Si el servidor aloja varias páginas web, se debe indicar esta cabecera, ya que si no lo hacemos se puede estar accediendo a otra parte del servidor.
User-Agent: Indica el nombre de la aplicación que usa el cliente en el momento de la conexión.
Accept: Indica los tipos de archivo que acepta el cliente.
Acept-Charset: Indica que tipo de caracteres acepta el servidor.
Connection: Indica si la conexión se cierra al momento de procesar la petición, o si queda a la escucha de mas peticiones. Si es así se indica la cabecera keep-alive.
Keep-Alive: Indica el tiempo en milisegundos de espera del servidor en escucha de más peticiones. Se usa en conexiones persistentes, y sirve para hace peticiones sobre múltiples objetos.
Servidor:
La respuesta del servidor al cliente va así:
Código
(Respuesta)(crlf) (Cabeceras del servidor)(crlf) (crlf) (Cuerpo del mensaje)
Respuesta:
Indica la versión y un código de estado. Los códigos más comunes son:
200 = Indica que todo va bien
300 = Que existen múltiples archivos con algún nombre
302 = Recurso movido temporalmente
400 = Mala petición
403 = Denegado
404 = No se encontró el recurso
500 = Error interno del servidor
501 = No implementado (Para los métodos)
Entre otros.
Cabeceras del servidor:
En estas cabeceras se puede encontrar información acerca del servidor, tal como el nombre mismo del servidor que se usa, el sistema operativo en el cual se encuentra (Aunque muchas veces no lo da), la fecha y hora en la que se encuentra, las cookies que el manda, el tipo de contenido que se envió, entre otros.
Cuerpo del mensaje:
En esta se encuentra la respuesta en si del servidor a un recurso que existe.
Para entenderlo todo mejor un ejemplo de las dos conexiones mas usadas, GET y POST.
Caso1
Tenemos un servidor donde esta alojado un archivo html llamado “ejemplo.html” que esta ubicado en la carpeta “ejemplos” de la carpeta raíz de tal servidor. Además de esto sabemos que el nombre del servidor es “ejemplo.co”
Petición del cliente:
Código
GET /ejemplos/ejemplo.html http/1.1 (crlf) Host: ejemplo.co (crlf) Connection: Close (crlf) (crlf)
A lo que el servidor respondería:
Código
El content-length indica cuantos bytes fueron transferidos en el cuerpo del mensaje.
HTTP/1.1 200 OK (crlf) Server: Ejemplos/1.1 (crlf) Date: Fri 02 Nov 2007 00:00:03 GMT (crlf) Content-Length: 81 (crlf) (crlf) <html><head><title>Ejemplos</title></head><body><h1>Ejemplo!!</h1></body></html>
Luego de esto se cerraría la conexión.
Acá entra el concepto de variables get usadas en php. Veamos:
Hola.php ubicado en la carpeta raiz de un servidor que se llama variables.com:
Código
$mensaje = $_GET['msg']; Echo $mensaje;
Petición:
Código
GET /hola.php?msg=holaaaa HTTP/1.0 (crlf) Host: variables.com (crlf) Connection: Close (crlf) (crlf)
Respuesta:
Código
HTTP/1.0 200 OK Server: Ejemplos/1.1 (crlf) Date: Fri 02 Nov 2007 00:00:06 GMT (crlf) Content-Length: 7 (crlf) (crlf) holaaaa
Vemos que en la petición, la variable get se envía en la primera línea, donde se hace petición del recurso. El recurso de separa de la variable con un signo de interrogación “?” y la variable tiene el formato: “Variable” “=” “Contenido”: hola.php?msg=holaaa.
El script obtiene el contenido de la variable “msg” y hace un echo con ella.
Se cierra la conexión.