Protocolo http

Download Protocolo http

Post on 24-Jun-2015

6.465 views

Category:

Technology

0 download

Embed Size (px)

TRANSCRIPT

<ul><li> 1. Dani Gutirrez Porset [email_address] <ul><li><ul><li>protocolo http </li></ul></li></ul></li></ul> <p> 2. ndice </p> <ul><li>Introduccin </li></ul> <ul><li>Mensajes. Mtodos de peticin. Cdigos de estado </li></ul> <ul><li>Caractersticas </li></ul> <ul><li>Seguridad </li></ul> <ul><li>Gestin de sesiones </li></ul> <ul><li>WebDAV </li></ul> <ul><li>Configuraciones en Firefox v2.0 </li></ul> <ul><li>URI / URL / URN </li></ul> <ul><li>Software: servidores y navegadores </li></ul> <ul><li>Licencia de uso </li></ul> <p> 3. Introduccin </p> <ul><li>Hypertext Transfer Protocol </li></ul> <ul><li>Desde 1994 </li></ul> <ul><li>RFC 2616 </li></ul> <ul><li>Sobre TCP. </li></ul> <ul><li>Puertos por defecto: </li></ul> <ul><li><ul><li>No seguro: tcp 80 </li></ul></li></ul> <ul><li><ul><li>Seguro (ssl/tls): 443 </li></ul></li></ul> <ul><li>Versiones: 0.9, 1.0, 1.1 (la ms usada), 1.2 </li></ul> <ul><li>Protocolo stateless </li></ul> <p> 4. Introduccin </p> <ul><li>Elementos: </li></ul> <ul><li><ul><li>Cliente=user agent: web browser, spider, wget, curl,... </li></ul></li></ul> <ul><li><ul><li>Servidor </li></ul></li></ul> <ul><li><ul><li>Intermediarios: Proxy, gateway, tnel </li></ul></li></ul> <p> 5. Mensajes </p> <ul><li>Mensaje de peticin: </li></ul> <ul><li><ul><li>Lnea de mtodo de peticin </li></ul></li></ul> <ul><li><ul><li>Lneas de cabecera de peticin (de tipo XXX:YYY) </li></ul></li></ul> <ul><li><ul><li> (Lnea en blanco) </li></ul></li></ul> <ul><li><ul><li>Cuerpo (opcional) </li></ul></li></ul> <ul><li>Mensaje de respuesta: </li></ul> <ul><li><ul><li>Lnea de cdigo de estado </li></ul></li></ul> <ul><li><ul><li>Lneas de cabecera de respuesta (de tipo XXX:YYY) </li></ul></li></ul> <ul><li><ul><li> (Lnea en blanco) </li></ul></li></ul> <ul><li><ul><li>Cuerpo (opcional) </li></ul></li></ul> <ul><li>Todas las lneas acaban en </li></ul> <p> 6. Mensaje de peticin </p> <ul><li>Ej: </li></ul> <ul><li><ul><li>GET / HTTP/1.1 </li></ul></li></ul> <ul><li><ul><li>Host: </li></ul></li></ul> <ul><li><ul><li>User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.12) Gecko/20080207 Ubuntu/7.10 (gutsy) Firefox/2.0.0.12 Paros/3.2.13 </li></ul></li></ul> <ul><li><ul><li>Accept: text/xml,text/plain;q=0.8,image/png,*/*;q=0.5 </li></ul></li></ul> <ul><li><ul><li>Accept-Language: es-es,en-us;q=0.7,en;q=0.3 </li></ul></li></ul> <ul><li><ul><li>Accept-Charset: UTF-8,* </li></ul></li></ul> <ul><li>Otras lneas de cabecera: </li></ul> <ul><li><ul><li>Keep-Alive, Proxy-Connection, Referer, Cookie, Content-length,... </li></ul></li></ul> <ul><li><ul><li>Ref:http://en.wikipedia.org/wiki/List_of_HTTP_headers </li></ul></li></ul> <p> 7. Mtodos de peticin </p> <ul><li>GET: solicita una peticin dentro de la URL. </li></ul> <ul><li>POST: enva datos en el cuerpo de la peticin </li></ul> <ul><li>PUT: upload </li></ul> <ul><li>HEAD: solicita una respuesta idntica a GET pero slo devuelve las cabeceras (no el cuerpo). </li></ul> <ul><li>DELETE: borrado </li></ul> <p> 8. Mtodos de peticin </p> <ul><li>TRACE: devuelve la peticin, para comprobar si algn equipo intermedio modifica la original </li></ul> <ul><li>OPTIONS: devuelve los mtodos soportados por el servidor </li></ul> <ul><li>CONNECT: empleado para tneles tcp/ip, tpicamente para hacer conexiones https a travs de un proxy http. Riesgo si en el proxy no se limitan los posibles destinos host:port </li></ul> <p> 9. Mensaje de respuesta </p> <ul><li>Ej: </li></ul> <ul><li><ul><li>HTTP/1.1 200 OK </li></ul></li></ul> <ul><li><ul><li>Date: Thu, 27 Mar 2008 21:29:14 GMT </li></ul></li></ul> <ul><li><ul><li>Content-Type: text/html; charset=US-ASCII </li></ul></li></ul> <ul><li><ul><li>Server: AmazonS3 </li></ul></li></ul> <ul><li>Otras lneas de cabecera: </li></ul> <ul><li><ul><li>ETag, Expires, Pragma, Vary, X-* </li></ul></li></ul> <ul><li><ul><li>Ref:http://en.wikipedia.org/wiki/List_of_HTTP_headers </li></ul></li></ul> <p> 10. Cdigos de estado </p> <ul><li>Son los cdigos devueltos por el servidor. </li></ul> <ul><li>Se agrupan en: </li></ul> <ul><li><ul><li>1xx Informacin </li></ul></li></ul> <ul><li><ul><li>2xx xito </li></ul></li></ul> <ul><li><ul><li>3xx Redireccin </li></ul></li></ul> <ul><li><ul><li>4xx Error de cliente </li></ul></li></ul> <ul><li><ul><li>5xx Error de servidor </li></ul></li></ul> <p> 11. Caractersticas </p> <ul><li>Negociacin de contenidos : mecanismo para devolver distintos recursos o documentos a partir de una URI solicitada. Ejs: Tipo imagen (gif, png), Idioma, text/html o text/* </li></ul> <ul><li><ul><li>Cabeceras: </li></ul></li></ul> <ul><li><ul><li><ul><li>De cliente. Ej.Accept-encoding: gzip, deflate </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>De servidor. Ej:Content-encoding: gzip </li></ul></li></ul></li></ul> <ul><li><ul><li>Tipos MIME (Multipurpose Internet Mail Extensions): </li></ul></li></ul> <ul><li><ul><li><ul><li>Forma de describir el tipo de documento a transmitir. </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>Sintaxis: major type/minor type. Ej: text/html, image/gif </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>Basados en extensin o en anlisis (file ...) </li></ul></li></ul></li></ul> <p> 12. Caractersticas </p> <ul><li>Compresin. </li></ul> <ul><li>Chunked transfer encoding(v1.1): dividir todo el contenido en fragmentos y enviarlos. </li></ul> <ul><li><ul><li>Ventajas: </li></ul></li></ul> <ul><li><ul><li><ul><li>Transmisin streamed en lugar de buffered: Posibilidad de ir enviando contenidos desde el servidor antes de conocer el tamao total del fichero. </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>Compresin </li></ul></li></ul></li></ul> <ul><li><ul><li>Cabecera del servidor: Transfer-encoding: chunked </li></ul></li></ul> <ul><li>Byte serving(v1.1): enviar slo la parte del fichero que el cliente indique. </li></ul> <p> 13. Caractersticas </p> <ul><li>Conexiones persistentes(HTTP keep-alive)(v1.1): hacer varias conexiones http con una sla conexin tcp. </li></ul> <ul><li><ul><li>Ventajas: </li></ul></li></ul> <ul><li><ul><li><ul><li>Menor carga de sistema operativo </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>Menos congestin en la red (menos conexiones tcp) y menor latencia en solicitudes posteriores. </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>Posibilidad de http pipelining </li></ul></li></ul></li></ul> <ul><li><ul><li>Segn rfc2616 un cliente no debera establecer ms de 2 conexiones persistentes al mismo tiempo con un servidor, para evitar la congestin. </li></ul></li></ul> <p> 14. Caractersticas </p> <ul><li>HTTP pipelining(v1.1): peticiones asncronas: enviar ms de una peticin http sin esperar las respuestas. </li></ul> <ul><li><ul><li>Ventaja: como se pueden enviar varias peticiones en un nico paquete tcp, es posible reducir la carga de red. </li></ul></li></ul> <p> 15. Caractersticas </p> <ul><li><ul><li>Cundo puede usarse: </li></ul></li></ul> <ul><li><ul><li><ul><li>Slo en conexiones keep-alive. En la primera conexin (an no se sabe si el servidor soporta v1.1). </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>No en POST (es una solicitud no idempotente) </li></ul></li></ul></li></ul> <ul><li><ul><li>Cuntas conexiones pipeline abrir: </li></ul></li></ul> <ul><li><ul><li><ul><li>Si se abren muchas y se cierra la conexin, se pierden y hay que volver a enviarlas. </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>Si las primeras peticiones tardan, produce sensacin de lentitud </li></ul></li></ul></li></ul> <p> 16. Seguridad </p> <ul><li>Mtodos de autenticacin propios de http: </li></ul> <ul><li><ul><li>Basic access: invlido por ir no encriptado </li></ul></li></ul> <ul><li><ul><li>Digest: basado en md5 con salt. </li></ul></li></ul> <ul><li><ul><li><ul><li>Considera usuario, password y realm (dominio o espacio). </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>Vulnerable a ataque man-in-the-middle. </li></ul></li></ul></li></ul> <ul><li>Otros mtodos: </li></ul> <ul><li><ul><li>URI https = http sobre ssl/tls. El mejor </li></ul></li></ul> <ul><li><ul><li>Cabecera http 1.1 Upgrade header. Apenas empleado </li></ul></li></ul> <ul><li><ul><li>s-http (Secure hypertext transfer protocol). Apenas empleado </li></ul></li></ul> <p> 17. Gestin de sesiones </p> <ul><li>Protocolo stateless: no guarda informacin sobre los clientes </li></ul> <ul><li>Tcnicas para mantener la historia: </li></ul> <ul><li><ul><li>Cookies (rfc 2109). Inconveniente: han de habilitarse en el browser </li></ul></li></ul> <ul><li><ul><li>URL rewriting (Ej.http://host/path;sessionid=12axY ) Inconvenientes: </li></ul></li></ul> <ul><li><ul><li><ul><li>Todas las URLs han de llevar el id. Por tanto, hay que generar todas las pginas de forma dinmica </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>Los bookmarks no valen </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>(URLs poco estticas) </li></ul></li></ul></li></ul> <ul><li><ul><li>Campos ocultos en formularios. Inviable a nivel general: no todo est en formularios </li></ul></li></ul> <p> 18. Gestin de sesiones </p> <ul><li>Se suelen encapsular a ms alto nivel: </li></ul> <ul><li><ul><li>APIs de php, java servlets,... </li></ul></li></ul> <ul><li><ul><li>Aplicacin </li></ul></li></ul> <ul><li>Cada sesin incluye: </li></ul> <ul><li><ul><li>Identificador de sesin a incluir en el trfico http </li></ul></li></ul> <ul><li><ul><li>Variables de sesin: pueden guardarse en ficheros de disco o ej. en base de datos </li></ul></li></ul> <ul><li><ul><li>Timeout </li></ul></li></ul> <ul><li>Implicaciones de seguridad: secuestro de sesin, ej. con URL rewriting </li></ul> <p> 19. Gestin de sesiones </p> <ul><li>Alternativas de almacenamiento de informacin de sesiones: </li></ul> <ul><li><ul><li>En el lado del servidor. Inconvenientes: </li></ul></li></ul> <ul><li><ul><li><ul><li>Acceso a la informacin si hay varios servidores ejs. cluster, balance de carga. Soluciones: </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li><ul><li>Replicacin entre servidores </li></ul></li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li><ul><li>Comparticin: sockets, memoria, disco, BD </li></ul></li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>(Limitacin en el n de clientes) </li></ul></li></ul></li></ul> <ul><li><ul><li>En el lado del cliente: se usan cookies y criptografa. Inconvenientes: </li></ul></li></ul> <ul><li><ul><li><ul><li>Limitacin de tamao de cookie </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>Informacin del usuario no accesible fuera de la sesin </li></ul></li></ul></li></ul> <p> 20. WebDAV </p> <ul><li>Web-based Distributed Authoring and Versioning </li></ul> <ul><li>Extensiones al protocolo HTTP que permiten editar y gestionar ficheros en servidores web de forma colaborativa </li></ul> <p> 21. Configuraciones en Firefox v2.0 </p> <ul><li>En about:config parmetros network.http.* </li></ul> <ul><li><ul><li>accept-encoding (ej. gzip), accept.default (ej. text/xml) </li></ul></li></ul> <ul><li><ul><li>default-socket-type </li></ul></li></ul> <ul><li><ul><li>max-connections, max-connections-per-server </li></ul></li></ul> <ul><li><ul><li>keep-alive, proxy.keep-alive, keep-alive.timeout,request.max-start-delay, max-persistent-connections-per-server, max-persistent-connections-per-proxy, </li></ul></li></ul> <ul><li><ul><li>pipelining, proxy.pipelining,pipelining.maxrequests </li></ul></li></ul> <ul><li><ul><li>redirection-limit </li></ul></li></ul> <ul><li><ul><li>sendRefererHeader, sendSecureXSiteReferrer </li></ul></li></ul> <ul><li><ul><li>use-cache </li></ul></li></ul> <ul><li><ul><li>proxy.version, version </li></ul></li></ul> <p> 22. URI / URL / URN </p> <ul><li>URI: Uniform Resource Identifier </li></ul> <ul><li>Sintaxis genrica de URIs: : [ ? ] [ # ] </li></ul> <ul><li><ul><li> ej. http, mailto </li></ul></li></ul> <ul><li><ul><li> ej. //www.acme.com:8080/path/fichero;nombre=patxi </li></ul></li></ul> <p> 23. URI / URL / URN </p> <ul><li>URL/URN: Uniform Resource Locator/Name: </li></ul> <ul><li><ul><li>URL: dnde </li></ul></li></ul> <ul><li><ul><li>URN: qu/quin </li></ul></li></ul> <ul><li>URL: URI que adems de identificar un recurso indica la forma de localizar el mismo. </li></ul> <ul><li><ul><li>Ej: http://www.acme.com/fichero.html </li></ul></li></ul> <ul><li>URN: URI que emplea el esquema urn. </li></ul> <ul><li><ul><li>Ej: urn:isbn:0-395-36341-1 </li></ul></li></ul> <ul><li>URC: para incluir meta-informacin </li></ul> <p> 24. Software Servidores web </p> <ul><li>Clasificaciones segn S.O., funcionalidades, requisitos (ej. tinyXXX, embeddedXXX). </li></ul> <ul><li>Listados: </li></ul> <ul><li><ul><li>Ranking uso: Netcraft. Apache, Microsoft IIS, Google GWS, Lighttpd,... </li></ul></li></ul> <ul><li><ul><li><ul><li>http://news.netcraft.com </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>http://survey.netcraft.com/Reports/200801/ </li></ul></li></ul></li></ul> <ul><li><ul><li>Paquetes de ubuntu: aolserver, apache, boa, cherokee, lighttpd, mini-httpd, roxen4,... </li></ul></li></ul> <ul><li><ul><li>http://en.wikipedia.org/wiki/Comparison_of_web_servers </li></ul></li></ul> <ul><li><ul><li>http://en.wikipedia.org/wiki/Comparison_of_lightweight_web_servers </li></ul></li></ul> <ul><li>Chequeo: http://toolbar.netcraft.com/site_report?url=... </li></ul> <p> 25. Software - Navegadores </p> <ul><li>Grficos: </li></ul> <ul><li><ul><li>Firefox, IE, Safari, Opera, Netscape, Konqueror, Maxthon (gratis, no libre, slo Windows),... </li></ul></li></ul> <ul><li><ul><li>Motores de renderizado: gecko (Firefox, Netscape), trident (IE, Maxthon), WebKit (Safari), Presto (Opera), khtml (Konqueror) </li></ul></li></ul> <ul><li>De texto: lynx </li></ul> <ul><li>Curiosidades: spacetime, flock,... </li></ul> <ul><li>Referencias: </li></ul> <ul><li><ul><li>http://en.wikipedia.org/wiki/List_of_web_browsers </li></ul></li></ul> <ul><li><ul><li>http://en.wikipedia.org/wiki/Comparison_of_web_browsers </li></ul></li></ul> <ul><li><ul><li>http://en.wikipedia.org/wiki/Usage_share_of_web_browsers </li></ul></li></ul> <ul><li><ul><li>http://en.wikipedia.org/wiki/List_of_layout_engines </li></ul></li></ul> <p> 26. Licencia de Uso </p> <ul><li><ul><li>http://creativecommons.org/licenses/by-sa/3.0/ </li></ul></li></ul>