Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Dani Gutiérrez Porset [email_address] <ul><ul><li>protocolo http </li></ul></ul>
Índice <ul><li>Introducción </li></ul><ul><li>Mensajes. Métodos de petición. Códigos de estado </li></ul><ul><li>Caracterí...
Introducción <ul><li>Hypertext Transfer Protocol </li></ul><ul><li>Desde 1994 </li></ul><ul><li>RFC 2616 </li></ul><ul><li...
Introducción <ul><li>Elementos: </li></ul><ul><ul><li>Cliente=user agent: web browser, spider, wget, curl,... </li></ul></...
Mensajes <ul><li>Mensaje de petición: </li></ul><ul><ul><li>Línea de método de petición </li></ul></ul><ul><ul><li>Líneas ...
Mensaje de petición <ul><li>Ej: </li></ul><ul><ul><li>GET / HTTP/1.1 </li></ul></ul><ul><ul><li>Host: </li></ul></ul><ul><...
Métodos de petición <ul><li>GET: solicita una petición dentro de la URL. </li></ul><ul><li>POST: envía datos en el cuerpo ...
Métodos de petición <ul><li>TRACE: devuelve la petición, para comprobar si algún equipo intermedio modifica la original </...
Mensaje de respuesta <ul><li>Ej: </li></ul><ul><ul><li>HTTP/1.1 200 OK </li></ul></ul><ul><ul><li>Date: Thu, 27 Mar 2008 2...
Códigos de estado <ul><li>Son los códigos devueltos por el servidor. </li></ul><ul><li>Se agrupan en: </li></ul><ul><ul><l...
Características <ul><li>Negociación de contenidos : mecanismo para devolver distintos recursos o documentos a partir de un...
Características <ul><li>Compresión. </li></ul><ul><li>Chunked transfer encoding  (v1.1): dividir todo el contenido en frag...
Características <ul><li>Conexiones persistentes  (“HTTP keep-alive”)  (v1.1): hacer varias conexiones http con una sóla co...
Características <ul><li>HTTP pipelining  (v1.1): peticiones asíncronas: enviar más de una petición http sin esperar las re...
Características <ul><ul><li>Cuándo puede usarse: </li></ul></ul><ul><ul><ul><li>Sólo en conexiones keep-alive. En la prime...
Seguridad <ul><li>Métodos de autenticación propios de http: </li></ul><ul><ul><li>Basic access: inválido por ir no encript...
Gestión de sesiones <ul><li>Protocolo stateless: no guarda información sobre los clientes </li></ul><ul><li>Técnicas para ...
Gestión de sesiones <ul><li>Se suelen encapsular a más alto nivel: </li></ul><ul><ul><li>APIs de php, java servlets,... </...
Gestión de sesiones <ul><li>Alternativas de almacenamiento de información de sesiones: </li></ul><ul><ul><li>En el lado de...
WebDAV <ul><li>Web-based Distributed Authoring and Versioning </li></ul><ul><li>Extensiones al protocolo HTTP que permiten...
Configuraciones en Firefox v2.0 <ul><li>En about:config parámetros network.http.* </li></ul><ul><ul><li>accept-encoding (e...
URI / URL / URN <ul><li>URI: Uniform Resource Identifier </li></ul><ul><li>Sintaxis genérica de URIs: <scheme name> : <hie...
URI / URL / URN <ul><li>URL/URN: Uniform Resource Locator/Name: </li></ul><ul><ul><li>URL: dónde </li></ul></ul><ul><ul><l...
Software – Servidores web <ul><li>Clasificaciones según S.O., funcionalidades, requisitos (ej. tinyXXX, embeddedXXX). </li...
Software - Navegadores <ul><li>Gráficos: </li></ul><ul><ul><li>Firefox, IE, Safari, Opera, Netscape, Konqueror, Maxthon (g...
Licencia de Uso <ul><ul><li>http://creativecommons.org/licenses/by-sa/3.0/ </li></ul></ul>
Upcoming SlideShare
Loading in …5
×

Protocolo http

8,660 views

Published on

Published in: Technology
  • Be the first to comment

Protocolo http

  1. 1. Dani Gutiérrez Porset [email_address] <ul><ul><li>protocolo http </li></ul></ul>
  2. 2. Índice <ul><li>Introducción </li></ul><ul><li>Mensajes. Métodos de petición. Códigos de estado </li></ul><ul><li>Características </li></ul><ul><li>Seguridad </li></ul><ul><li>Gestión 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>
  3. 3. Introducción <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><ul><li>No seguro: tcp 80 </li></ul></ul><ul><ul><li>Seguro (ssl/tls): 443 </li></ul></ul><ul><li>Versiones: 0.9, 1.0, 1.1 (la más usada), 1.2 </li></ul><ul><li>Protocolo stateless </li></ul>
  4. 4. Introducción <ul><li>Elementos: </li></ul><ul><ul><li>Cliente=user agent: web browser, spider, wget, curl,... </li></ul></ul><ul><ul><li>Servidor </li></ul></ul><ul><ul><li>Intermediarios: Proxy, gateway, túnel </li></ul></ul>
  5. 5. Mensajes <ul><li>Mensaje de petición: </li></ul><ul><ul><li>Línea de método de petición </li></ul></ul><ul><ul><li>Líneas de cabecera de petición (de tipo XXX:YYY) </li></ul></ul><ul><ul><li><CR><LF> (Línea en blanco) </li></ul></ul><ul><ul><li>Cuerpo (opcional) </li></ul></ul><ul><li>Mensaje de respuesta: </li></ul><ul><ul><li>Línea de código de estado </li></ul></ul><ul><ul><li>Líneas de cabecera de respuesta (de tipo XXX:YYY) </li></ul></ul><ul><ul><li><CR><LF> (Línea en blanco) </li></ul></ul><ul><ul><li>Cuerpo (opcional) </li></ul></ul><ul><li>Todas las líneas acaban en <CR><LF> </li></ul>
  6. 6. Mensaje de petición <ul><li>Ej: </li></ul><ul><ul><li>GET / HTTP/1.1 </li></ul></ul><ul><ul><li>Host: </li></ul></ul><ul><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></ul><ul><ul><li>Accept: text/xml,text/plain;q=0.8,image/png,*/*;q=0.5 </li></ul></ul><ul><ul><li>Accept-Language: es-es,en-us;q=0.7,en;q=0.3 </li></ul></ul><ul><ul><li>Accept-Charset: UTF-8,* </li></ul></ul><ul><li>Otras líneas de cabecera: </li></ul><ul><ul><li>Keep-Alive, Proxy-Connection, Referer, Cookie, Content-length,... </li></ul></ul><ul><ul><li>Ref: http://en.wikipedia.org/wiki/List_of_HTTP_headers </li></ul></ul>
  7. 7. Métodos de petición <ul><li>GET: solicita una petición dentro de la URL. </li></ul><ul><li>POST: envía datos en el cuerpo de la petición </li></ul><ul><li>PUT: upload </li></ul><ul><li>HEAD: solicita una respuesta idéntica a GET pero sólo devuelve las cabeceras (no el cuerpo). </li></ul><ul><li>DELETE: borrado </li></ul>
  8. 8. Métodos de petición <ul><li>TRACE: devuelve la petición, para comprobar si algún equipo intermedio modifica la original </li></ul><ul><li>OPTIONS: devuelve los métodos soportados por el servidor </li></ul><ul><li>CONNECT: empleado para túneles tcp/ip, típicamente para hacer conexiones https a través de un proxy http. Riesgo si en el proxy no se limitan los posibles destinos host:port </li></ul>
  9. 9. Mensaje de respuesta <ul><li>Ej: </li></ul><ul><ul><li>HTTP/1.1 200 OK </li></ul></ul><ul><ul><li>Date: Thu, 27 Mar 2008 21:29:14 GMT </li></ul></ul><ul><ul><li>Content-Type: text/html; charset=US-ASCII </li></ul></ul><ul><ul><li>Server: AmazonS3 </li></ul></ul><ul><li>Otras líneas de cabecera: </li></ul><ul><ul><li>ETag, Expires, Pragma, Vary, X-* </li></ul></ul><ul><ul><li>Ref: http://en.wikipedia.org/wiki/List_of_HTTP_headers </li></ul></ul>
  10. 10. Códigos de estado <ul><li>Son los códigos devueltos por el servidor. </li></ul><ul><li>Se agrupan en: </li></ul><ul><ul><li>1xx Información </li></ul></ul><ul><ul><li>2xx Éxito </li></ul></ul><ul><ul><li>3xx Redirección </li></ul></ul><ul><ul><li>4xx Error de cliente </li></ul></ul><ul><ul><li>5xx Error de servidor </li></ul></ul>
  11. 11. Características <ul><li>Negociación 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><ul><li>Cabeceras: </li></ul></ul><ul><ul><ul><li>De cliente. Ej. Accept-encoding: gzip, deflate </li></ul></ul></ul><ul><ul><ul><li>De servidor. Ej: Content-encoding: gzip </li></ul></ul></ul><ul><ul><li>Tipos MIME (Multipurpose Internet Mail Extensions): </li></ul></ul><ul><ul><ul><li>Forma de describir el tipo de documento a transmitir. </li></ul></ul></ul><ul><ul><ul><li>Sintaxis: major type/minor type. Ej: text/html, image/gif </li></ul></ul></ul><ul><ul><ul><li>Basados en extensión o en análisis (file ...) </li></ul></ul></ul>
  12. 12. Características <ul><li>Compresión. </li></ul><ul><li>Chunked transfer encoding (v1.1): dividir todo el contenido en fragmentos y enviarlos. </li></ul><ul><ul><li>Ventajas: </li></ul></ul><ul><ul><ul><li>Transmisión “streamed” en lugar de “buffered”: Posibilidad de ir enviando contenidos desde el servidor antes de conocer el tamaño total del fichero. </li></ul></ul></ul><ul><ul><ul><li>Compresión </li></ul></ul></ul><ul><ul><li>Cabecera del servidor: Transfer-encoding: chunked </li></ul></ul><ul><li>Byte serving (v1.1): enviar sólo la parte del fichero que el cliente indique. </li></ul>
  13. 13. Características <ul><li>Conexiones persistentes (“HTTP keep-alive”) (v1.1): hacer varias conexiones http con una sóla conexión tcp. </li></ul><ul><ul><li>Ventajas: </li></ul></ul><ul><ul><ul><li>Menor carga de sistema operativo </li></ul></ul></ul><ul><ul><ul><li>Menos congestión en la red (menos conexiones tcp) y menor latencia en solicitudes posteriores. </li></ul></ul></ul><ul><ul><ul><li>Posibilidad de http pipelining </li></ul></ul></ul><ul><ul><li>Según rfc2616 un cliente no debería establecer más de 2 conexiones persistentes al mismo tiempo con un servidor, para evitar la congestión. </li></ul></ul>
  14. 14. Características <ul><li>HTTP pipelining (v1.1): peticiones asíncronas: enviar más de una petición http sin esperar las respuestas. </li></ul><ul><ul><li>Ventaja: como se pueden enviar varias peticiones en un único paquete tcp, es posible reducir la carga de red. </li></ul></ul>
  15. 15. Características <ul><ul><li>Cuándo puede usarse: </li></ul></ul><ul><ul><ul><li>Sólo en conexiones keep-alive. En la primera conexión (aún no se sabe si el servidor soporta v1.1). </li></ul></ul></ul><ul><ul><ul><li>No en POST (es una solicitud no idempotente) </li></ul></ul></ul><ul><ul><li>Cuántas conexiones pipeline abrir: </li></ul></ul><ul><ul><ul><li>Si se abren muchas y se cierra la conexión, se pierden y hay que volver a enviarlas. </li></ul></ul></ul><ul><ul><ul><li>Si las primeras peticiones tardan, produce sensación de lentitud </li></ul></ul></ul>
  16. 16. Seguridad <ul><li>Métodos de autenticación propios de http: </li></ul><ul><ul><li>Basic access: inválido por ir no encriptado </li></ul></ul><ul><ul><li>Digest: basado en md5 con salt. </li></ul></ul><ul><ul><ul><li>Considera usuario, password y realm (dominio o espacio). </li></ul></ul></ul><ul><ul><ul><li>Vulnerable a ataque “man-in-the-middle”. </li></ul></ul></ul><ul><li>Otros métodos: </li></ul><ul><ul><li>URI https = http sobre ssl/tls. El mejor </li></ul></ul><ul><ul><li>Cabecera http 1.1 Upgrade header. Apenas empleado </li></ul></ul><ul><ul><li>s-http (Secure hypertext transfer protocol). Apenas empleado </li></ul></ul>
  17. 17. Gestión de sesiones <ul><li>Protocolo stateless: no guarda información sobre los clientes </li></ul><ul><li>Técnicas para mantener la historia: </li></ul><ul><ul><li>Cookies (rfc 2109). Inconveniente: han de habilitarse en el browser </li></ul></ul><ul><ul><li>URL rewriting (Ej. http://host/path;sessionid=12axY ) Inconvenientes: </li></ul></ul><ul><ul><ul><li>Todas las URLs han de llevar el id. Por tanto, hay que generar todas las páginas de forma dinámica </li></ul></ul></ul><ul><ul><ul><li>Los bookmarks no valen </li></ul></ul></ul><ul><ul><ul><li>(URLs poco estéticas) </li></ul></ul></ul><ul><ul><li>Campos ocultos en formularios. Inviable a nivel general: no todo está en formularios </li></ul></ul>
  18. 18. Gestión de sesiones <ul><li>Se suelen encapsular a más alto nivel: </li></ul><ul><ul><li>APIs de php, java servlets,... </li></ul></ul><ul><ul><li>Aplicación </li></ul></ul><ul><li>Cada sesión incluye: </li></ul><ul><ul><li>Identificador de sesión a incluir en el tráfico http </li></ul></ul><ul><ul><li>Variables de sesión: pueden guardarse en ficheros de disco o ej. en base de datos </li></ul></ul><ul><ul><li>Timeout </li></ul></ul><ul><li>Implicaciones de seguridad: secuestro de sesión, ej. con URL rewriting </li></ul>
  19. 19. Gestión de sesiones <ul><li>Alternativas de almacenamiento de información de sesiones: </li></ul><ul><ul><li>En el lado del servidor. Inconvenientes: </li></ul></ul><ul><ul><ul><li>Acceso a la información si hay varios servidores ejs. cluster, balance de carga. Soluciones: </li></ul></ul></ul><ul><ul><ul><ul><li>Replicación entre servidores </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Compartición: sockets, memoria, disco, BD </li></ul></ul></ul></ul><ul><ul><ul><li>(Limitación en el nº de clientes) </li></ul></ul></ul><ul><ul><li>En el lado del cliente: se usan cookies y criptografía. Inconvenientes: </li></ul></ul><ul><ul><ul><li>Limitación de tamaño de cookie </li></ul></ul></ul><ul><ul><ul><li>Información del usuario no accesible fuera de la sesión </li></ul></ul></ul>
  20. 20. WebDAV <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>
  21. 21. Configuraciones en Firefox v2.0 <ul><li>En about:config parámetros network.http.* </li></ul><ul><ul><li>accept-encoding (ej. gzip), accept.default (ej. text/xml) </li></ul></ul><ul><ul><li>default-socket-type </li></ul></ul><ul><ul><li>max-connections, max-connections-per-server </li></ul></ul><ul><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></ul><ul><ul><li>pipelining, proxy.pipelining, pipelining.maxrequests </li></ul></ul><ul><ul><li>redirection-limit </li></ul></ul><ul><ul><li>sendRefererHeader, sendSecureXSiteReferrer </li></ul></ul><ul><ul><li>use-cache </li></ul></ul><ul><ul><li>proxy.version, version </li></ul></ul>
  22. 22. URI / URL / URN <ul><li>URI: Uniform Resource Identifier </li></ul><ul><li>Sintaxis genérica de URIs: <scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ] </li></ul><ul><ul><li><scheme name> ej. http, mailto </li></ul></ul><ul><ul><li><hierarchical part> ej. //www.acme.com:8080/path/fichero;nombre=patxi </li></ul></ul>
  23. 23. URI / URL / URN <ul><li>URL/URN: Uniform Resource Locator/Name: </li></ul><ul><ul><li>URL: dónde </li></ul></ul><ul><ul><li>URN: qué/quién </li></ul></ul><ul><li>URL: URI que además de identificar un recurso indica la forma de localizar el mismo. </li></ul><ul><ul><li>Ej: http://www.acme.com/fichero.html </li></ul></ul><ul><li>URN: URI que emplea el esquema urn. </li></ul><ul><ul><li>Ej: urn:isbn:0-395-36341-1 </li></ul></ul><ul><li>URC: para incluir meta-información </li></ul>
  24. 24. Software – Servidores web <ul><li>Clasificaciones según S.O., funcionalidades, requisitos (ej. tinyXXX, embeddedXXX). </li></ul><ul><li>Listados: </li></ul><ul><ul><li>Ranking uso: Netcraft. Apache, Microsoft IIS, Google GWS, Lighttpd,... </li></ul></ul><ul><ul><ul><li>http://news.netcraft.com </li></ul></ul></ul><ul><ul><ul><li>http://survey.netcraft.com/Reports/200801/ </li></ul></ul></ul><ul><ul><li>Paquetes de ubuntu: aolserver, apache, boa, cherokee, lighttpd, mini-httpd, roxen4,... </li></ul></ul><ul><ul><li>http://en.wikipedia.org/wiki/Comparison_of_web_servers </li></ul></ul><ul><ul><li>http://en.wikipedia.org/wiki/Comparison_of_lightweight_web_servers </li></ul></ul><ul><li>Chequeo: http://toolbar.netcraft.com/site_report?url=... </li></ul>
  25. 25. Software - Navegadores <ul><li>Gráficos: </li></ul><ul><ul><li>Firefox, IE, Safari, Opera, Netscape, Konqueror, Maxthon (gratis, no libre, sólo Windows),... </li></ul></ul><ul><ul><li>Motores de renderizado: gecko (Firefox, Netscape), trident (IE, Maxthon), WebKit (Safari), Presto (Opera), khtml (Konqueror) </li></ul></ul><ul><li>De texto: lynx </li></ul><ul><li>Curiosidades: spacetime, flock,... </li></ul><ul><li>Referencias: </li></ul><ul><ul><li>http://en.wikipedia.org/wiki/List_of_web_browsers </li></ul></ul><ul><ul><li>http://en.wikipedia.org/wiki/Comparison_of_web_browsers </li></ul></ul><ul><ul><li>http://en.wikipedia.org/wiki/Usage_share_of_web_browsers </li></ul></ul><ul><ul><li>http://en.wikipedia.org/wiki/List_of_layout_engines </li></ul></ul>
  26. 26. Licencia de Uso <ul><ul><li>http://creativecommons.org/licenses/by-sa/3.0/ </li></ul></ul>

×