# 3.1. Principios para el trabajo en la Web  Cada vez que abra su navegador , escriba algun direccion URL y pulse ENTER, entonces usted verá hermosas páginas web que aparecen en pantalla. ¿Pero usted sabe lo que está sucediendo detrás de esta simple acción ? Normalmente, el navegador es un cliente , después de teclear la URL , envía peticiones a un servidor DNS, para obtener la dirección IP de la URL. Luego de encontrar el servidor en esta dirección IP , pide las conexiones TCP de configuración. Cuando el navegador finalizó el envío de peticiones HTTP , servidor se inicia el manejo de sus paquetes de solicitud , y luego regresar los paquetes de respuesta HTTP en tu navegador . Por último , el explorador representa cuerpos de las páginas web , y se desconecta del servidor . ![](images/3.1.web2.png?raw=true) Figura 3.1 Procesos de usuarios que visitan una página web Un servidor web también conocido como un servidor HTTP , utiliza el protocolo HTTP para comunicarse con los clientes . Todos los navegadores web pueden ser vistos como clientes. Podemos dividir los principios de trabajo de Internet en los pasos siguientes : - El cliente utiliza el protocolo TCP / IP para conectarse al servidor . - El cliente envía paquetes de solicitud HTTP al servidor. - El servidor devuelve los paquetes de respuesta HTTP para el cliente , si los recursos de petición incluyen scripts dinámicos , el servidor llama al motor de scripts primero . - El cliente se desconecta del servidor, comienza renderizado HTML. Este es un sencillo flujo de trabajo de asuntos HTTP , observe que el servidor despues de un tiempo cierra las conexiones de datos que se envían a los clientes, y espera a que la próxima petición. ## URL y la resolución de DNS Siempre estamos utilizando URL para acceder a páginas web , pero ¿sabes cómo funciona el URL ? El nombre completo de la dirección URL es Uniform Resource Locator , esto es para la descripción de recursos en Internet. Su forma básica como sigue . ``` esquema://host[:port #]/ruta/.../[? cadena de consulta ][# ancla ] esquema: asignación de protocolo subyacente (como HTTP , HTTPS, FTP ) host: IP o nombre de dominio del servidor HTTP puerto#: puerto por defecto es 80 , y se puede omitir en este caso. Si desea utilizar otros puertos , debe especificar qué puerto . Por ejemplo , http://www.cnblogs.com:8080/ ruta: recursos de trayectoria datos: la cadena de consulta se envían al servidor ancla Ancla ``` DNS es la abreviatura de Sistema de nombres de dominio , que es el sistema de nombres de servicios informáticos en red , convierte nombres de dominio a direcciones IP reales , al igual que un traductor. ![](images/3.1.dns_hierachy.png?raw=true) Figura 3.2 Principios de funcionamiento de DNS Para entender más acerca de su principio de funcionamiento , veamos en detallado el proceso de resolución de DNS de la siguiente manera. 1. Después de escrito el nombre de dominio www.qq.com en el navegador , el sistema operativo comprueba si hay alguna relación de correspondencia en el archivo hosts para el nombre de dominio , si es así, termina la resolución de nombres de dominio. 2. Si no hay relación de proyección en el fichero hosts , el sistema operativo comprueba si hay alguna caché en el DNS, si es así, terminó la resolución de nombres de dominio. 3. Si no hay relación de proyección de los anfitriones y la caché de DNS , el sistema operativo busca el primer servidor de resolución de DNS en la configuración de TCP / IP, que es el servidor DNS local en este momento. Cuando el servidor DNS local recibió consulta, si el nombre de dominio que desea consultar está contenida en la configuración local de los recursos regionales , a continuación, devuelve los resultados al cliente . Esta resolución DNS es autoritativo . 4. Si el servidor DNS local no contiene el nombre de dominio , y hay una relación de correspondencia en la memoria caché , el servidor DNS local devuelve este resultado a cliente. Esta resolución DNS no está autorizado. 5. Si el servidor DNS local no puede resolver el nombre de dominio , ya sea por la configuración de los recursos regionales o caché , que se mete en el próximo paso depende de la configuración del servidor DNS local. Si el servidor DNS local no permite el modo de avance , envía la solicitud a la raíz del servidor DNS, a continuación, devuelve la dirección IP del servidor DNS de nivel superior para saber el nombre de dominio , .com en este caso. Si el primer servidor DNS de nivel superior no sabe , envía la solicitud al siguiente servidor DNS de primer nivel hasta el que sabe el nombre de dominio . A continuación, el servidor DNS de nivel superior le pregunta al siguiente servidor DNS de nivel para qq.com , luego encuentra el www.qq.com en algunos servidores. - Si el servidor DNS local habilita seguir adelante, envía la solicitud al servidor DNS de nivel superior , si el servidor DNS de nivel superior también no sabe el nombre de dominio , a continuación, seguira enviando solicitudes a nivel superior. - Si el servidor DNS local permite a modo de avance , la dirección IP del servidor de nombre de dominio devuelve al servidor DNS local , y el servidor local envía a los clientes. Sea que el cliente DNS local habilite o no el redireccionamiento, la dirección IP del dominio siempre se retornará al serviror local de DNS, y el servidor local DNS se lo enviará de vuelta al cliente ![](images/3.1.dns_inquery.png?raw=true) Figura 3.3 DNS flujo de trabajo de resolución. `Proceso de consulta recursiva significa que las solicitudes de información están cambiando en el proceso, encambio las solicitudes de información no cambian en el proceso de consulta iterativa .` Ahora sabemos que los clientes obtendran direcciones IP , al final, por lo que los navegadores estan comunicandose con los servidores a través de las direcciones IP. ## Protocolo HTTP Protocolo HTTP es la parte fundamental de los servicios web. Es importante saber lo que es el protocolo HTTP antes de entender cómo funciona la web. HTTP es el protocolo que se utiliza para la comunicación entre navegadores y servidores web , se basa en el protocolo TCP , y por lo general utilizan el puerto 80 en el servidor web. Es un protocolo que utiliza el modelo de petición-respuesta , los clientes envían peticiones y respuestas a los servidores. De acuerdo con el protocolo HTTP , los clientes siempre cnfiguran una nueva conexión y envian una petición HTTP al servidor en cada asunto . Si el servidor no es capaz de conectar con el cliente de forma proactiva , a una llamada de conexión. La conexión entre el cliente y el servidor puede ser cerrada por cualquier lado . Por ejemplo , usted puede cancelar su tarea de descarga y conexión HTTP. Se desconecta del servidor antes de que termine la descarga. El protocolo HTTP no tiene estado, lo que significa que el servidor no tiene idea acerca de la relación entre dos conexiones , a pesar de que son ambos de un mismo cliente . Para solucionar este problema, las aplicaciones web usan Cookies para mantener el estado sostenible de conexiones. Por esta causa, debido a que el protocolo HTTP se basa en el protocolo TCP , todos los ataques TCP afectarán a la comunicación HTTP en el servidor , como por ejemplo SYN Flood, DoS y DDoS . ### Paquete de solicitud HTTP (información del navegador). Solicitar paquetes tienen tres partes: la línea de petición , solicitud de encabezado y cuerpo . Hay una línea en blanco entre la cabecera y el cuerpo. ``` GET/domains/ejemplo/HTTP/1.1 // línea de solicitud : método de la petición , la dirección URL , el protocolo y su versión. Host: www.iana.org / / nombre de dominio User-Agent : Mozilla/5.0 (Windows NT 6.1 ) AppleWebKit/537.4 ( KHTML , like Gecko ) información Chrome/22.0.1229.94 Safari/537.4 / / navegador Accept: text/html,application/xhtml+xml,application/xml;q=0,9,*/*;q=0.8 // mina que los clientes pueden aceptar Accept- Encoding : gzip , desinfla , compresión SDCH / / arroyo Accept- Charset : UTF- 8 , * ; q = 0.5 / / conjunto de caracteres en el lado del cliente // Línea en blanco // Cuerpo , los argumentos de recursos solicitud (por ejemplo , los argumentos de la POST ) ``` Utilizamos fiddler que obtener la siguiente información de la solicitud. ![](images/3.1.http.png?raw=true) Figura 3.4 Información de método GET capturado por fiddler ![](images/3.1.httpPOST.png?raw=true) Figura 3.5 Información de método POST capturado por fiddler **Podemos ver que el método GET no tiene cuerpo de la solicitud que el POST hace.** Hay muchos métodos que puede utilizar para comunicarse con los servidores de HTTP ; GET, POST , PUT , DELETE son los 4 métodos básicos que utilizamos. Una URL representa un recurso en la red, por lo que estos 4 métodos significan consultar, cambiar , agregar y eliminar operaciones. GET y POST son los más utilizados en HTTP. GET anexa a la dirección URL y los usos ? para romper ellos , usos y entre los argumentos , como EditPosts.aspx ? name = test1 & id = 123456. POST pone los datos en el cuerpo de la petición , porque el URL tiene limitación de longitud por los navegadores , por lo que POST puede presentar muchos más datos que obtenga el método. También, cuando pasamos nuestro nombre de usuario y contraseña , no queremos que este tipo de información aparesca en la URL , por lo que utilizamos la POST para mantenerlos invisibles. ### Paquete de respuesta HTTP (información del servidor) Vamos a ver qué tipo de información se incluye en los paquetes de respuesta. ``` HTTP/1.1 200 OK // estado Server : nginx/1.0.8 // web server y su versión en el equipo servidor Date:Date: Tue, 30 Oct 2012 04:14:25 GMT // tiempo respondió Content-Type : text / html // tipo de datos que responde Transfer-Encoding: chunked // significa que los datos se envían en fragmentos Conexión : keep-alive // mantener la conexión Content-Length: 90 // longitud del cuerpo // Línea en blanco