Protocolo http

7,601 views

Published on

Published in: Technology
1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total views
7,601
On SlideShare
0
From Embeds
0
Number of Embeds
64
Actions
Shares
0
Downloads
186
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

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>

×