|
| 1 | +# JavaScript y el Navegador |
| 2 | + |
| 3 | +{{quote {author: "Tim Berners-Lee", title: "The World Wide Web: A very short personal history", chapter: true} |
| 4 | + |
| 5 | +El sueño detrás de la Web es el de un espacio común de información |
| 6 | +en el cual nos comunicamos compartiendo información. |
| 7 | +Su universalidad es esencial: el echo de que un enlace pueda apuntar a cualquier cosa, |
| 8 | +ya sea personal, local o global, ya sea un borrador o este muy pulido. |
| 9 | + |
| 10 | +quote}} |
| 11 | + |
| 12 | +{{index "Berners-Lee, Tim", "World Wide Web", HTTP, [JavaScript, "history of"], "World Wide Web"}} |
| 13 | + |
| 14 | +{{figure {url: "img/chapter_picture_13.jpg", alt: "Picture of a telephone switchboard", chapter: "framed"}}} |
| 15 | + |
| 16 | +Los próximos capítulos del libro hablarán del navegador web. Sin |
| 17 | +((navegador))es web, no existiría JavaScript. Incluso, si existieran, |
| 18 | +nadie le habría puesto atención. |
| 19 | + |
| 20 | +{{index decentralization, compatibility}} |
| 21 | + |
| 22 | +La tecnología web ha estado descentralizada desde el principio, |
| 23 | +no sólo técnicamente, también en la forma en que ha evolucionado. |
| 24 | +Distintos proveedores de nagevadores han agregado nueva funcionalidad |
| 25 | +adhoc y algunas veces ha sido de una forma deficiente, y entonces, |
| 26 | +termina siendo adoptada por otros-y finalmente es aceptada como |
| 27 | +((estándar)). |
| 28 | + |
| 29 | +Esta es a la vez una bendición y una maldición. Por un lado, empodera el no tener |
| 30 | +un control central, sino que es mejorado por distintas partes trabajando |
| 31 | +en ((colaboración)) (o a veces hostilidad abierta). Por otro lado, la |
| 32 | +forma aleatoria en la que la web fue desarrollada significa que el sistema |
| 33 | +resultante no es exactamente un ejemplo de ((consistencia)) interna. Algunas |
| 34 | +partes son francamente confusas y pobremente concebidas. |
| 35 | + |
| 36 | +## Redes e Internet |
| 37 | + |
| 38 | +Las ((red))es de computadoras han existido de los 50s. Si pones cables |
| 39 | +entre dos o más computadoras y les permites enviar y recibir información |
| 40 | +a través de esos cables, puedes hacer todo tipo de cosas increíbles. |
| 41 | + |
| 42 | +Y si conectar dos computadoras en el mismo edificio nos permite hacer |
| 43 | +cosas increíbles, conectar computadoras alrededor del mundo debería ser |
| 44 | +incluso mejor. La tecnología para iniciar la implementación de esta visión |
| 45 | +fue desarrollada en los 80s, y la red resultante es llamada _((Internet))_. |
| 46 | +Ha cumplido su promesa. |
| 47 | + |
| 48 | +Una computadora puede usar esta red para mandar bits a otra computadora. Para |
| 49 | +cualquier ((comunicación)) efectiva, las computadoras en ambos lados deben |
| 50 | +saber qué se supone que representan los bits. El significado de cualquier |
| 51 | +secuencia de bits depende enteramente del tipo de cosas que se está tratando |
| 52 | +de expresar y del mecanismo de ((codificación)) utilizado. |
| 53 | + |
| 54 | +{{index [network, protocol]}} |
| 55 | + |
| 56 | +Un _((protocolo)) de red_ describe un estilo de comunicación sobre una ((red)). |
| 57 | +Hay protocolos para mandar correos electrónicos, para recibir correos electrónicos, |
| 58 | +para compartir archivos, e incluso para controlar computadoras que resultan estar |
| 59 | +infectadas por software malicioso. |
| 60 | + |
| 61 | +{{indexsee "Hypertext Transfer Protocol", HTTP}} |
| 62 | + |
| 63 | +Por ejemplo, el Protocolo de Transferencia de Hipertexto |
| 64 | +(((HTPP del inglés _Hypertext Transfer Protocol_))) es un protocolo |
| 65 | +para obtener ((recurso))s nombrados (fragmentos de información, como páginas web |
| 66 | +o imágenes). Especifica que el lado que hace la solicitud debe iniciar con |
| 67 | +una linea como esta, indicando el recurso y la versión del protocolo |
| 68 | +que se intenta usar: |
| 69 | + |
| 70 | +```{lang: "text/plain"} |
| 71 | +GET /index.html HTTP/1.1 |
| 72 | +``` |
| 73 | + |
| 74 | +Existen otras reglas acerca de cómo el solicitante puede incluir más |
| 75 | +información en la ((solicitud)) y la forma en qué el otro lado, que |
| 76 | +devuelve el recurso, empaca el contenido. Examinaremos HTTP en más detalle |
| 77 | +en el capítulo [Chapter ?](http). |
| 78 | + |
| 79 | +{{index layering, stream, ordering}} |
| 80 | + |
| 81 | +La mayoría de los protocolos están construidos sobre otros protocolos. HTTP |
| 82 | +utiliza la red como un dispositivo en el que pones bits y llegan a su destino |
| 83 | +correcto en el orden correcto. Como vimos en el capítulo [Chapter ?](async), |
| 84 | +asegurar eso ya es un problema muy complicado. |
| 85 | + |
| 86 | +{{index TCP}} |
| 87 | + |
| 88 | +{{indexsee "Transmission Control Protocol", TCP}} |
| 89 | + |
| 90 | +El _Protocolo de Control de Transmisión_ (TCP del inglés Transmission |
| 91 | +Control Protocol) es un ((protocolo)) que se encarga de este problema. |
| 92 | +Todos los dispositivos conectados a internet lo "hablan", y la mayor |
| 93 | +parte de la comunicación en ((internet)) está construida encima de él. |
| 94 | + |
| 95 | +{{index "listening (TCP)"}} |
| 96 | + |
| 97 | +Una ((conexión)) TCP funciona así: un computadora debe estar esperando, |
| 98 | +o _escuchando_, a que otras computadoras inicien a hablarle. Para poder |
| 99 | +escuchar diferentes tipos comunicaciones a la vez en una sola computadora, |
| 100 | +cada oyente tiene un número (llamado ((_puerto_))) asociado a él. La |
| 101 | +mayoria de los ((protocolo))s especifican qué puerto deben usar por |
| 102 | +defecto. Por ejemplo, cuando queremos enviar un correo electrónico |
| 103 | +utilizando el protocolo ((SMTP)), la máquina a través de la cual la |
| 104 | +enviamos esté escuchando en el puerto 25. |
| 105 | + |
| 106 | +Otra computadora pue establecer una ((conexion)) conectandose a la |
| 107 | +ocmputadora destino usando el puerto correcto. Si la computadora destino |
| 108 | +puede ser alcanzada y está escuchando en ee puerto, la conexión se |
| 109 | +crea de forma exitosa. La computadora oyente es llamada el _((servidor))_, |
| 110 | +y la computadora que se conecta es llamado el _((cliente))_. |
| 111 | + |
| 112 | +{{index [abtraction, "of the network"]}} |
| 113 | + |
| 114 | +Esa conexión actua como un una tubería de dos direcciones por la cual |
| 115 | +los bits pueden fluir, las computadoras en ambos extremos pueden poner |
| 116 | +información en esa tubería. Una vez que los bits son transmitidos de forma |
| 117 | +exitosa, pueden ser leidos nuevamente por la computadora en el otro lado. |
| 118 | +Este es un modelo conveniente. Podrías decir que ((TCP)) provee una |
| 119 | +abstracción de la red. |
| 120 | + |
| 121 | +{{id web}} |
| 122 | + |
| 123 | +## La Web |
| 124 | + |
| 125 | +La ((Red Mundial)) (en inglés World Wide Web, no confundir con ((Internet))) |
| 126 | +es un conjunto de ((protocolo))s y formatos que nos permiten visitar |
| 127 | +páginas web en un navegador. La parte "Web" del nombre se refiere al |
| 128 | +hecho de que esas páginas pueden enlazarse fácilmente unas con otras, |
| 129 | +conectandose a una gran ((red)) a entre la cual los usuarios pueden |
| 130 | +moverse. |
| 131 | + |
| 132 | +Para llegar a ser parte de la Web, todo lo que tienes que hacer es |
| 133 | +conectar una computadora a ((Internet)) y ponerla a escuchar en el |
| 134 | +puerto 80 con el protocolo ((HTTP)) para que otras computadoras puedan |
| 135 | +pedirle documentos. |
| 136 | + |
| 137 | +{{index URL}} |
| 138 | + |
| 139 | +{{indexsee "Uniform Resource Locator", URL}} |
| 140 | + |
| 141 | +Cada ((documento)) en la Web es nombrado por un _Localizador Uniforme |
| 142 | +de Recursos_ (URL del inglés Uniform Resource Locator), y se ve así: |
| 143 | + |
| 144 | +```{lang: null} |
| 145 | + http://eloquentjavascript.net/13_browser.html |
| 146 | + | | | | |
| 147 | + protocolo servidor ruta |
| 148 | +``` |
| 149 | + |
| 150 | +{{index HTTPS}} |
| 151 | + |
| 152 | +La primera sección nos dice que ésta URL utiliza el ((protocolo)) HTTP |
| 153 | +(La versión ecriptada sería _https://_). Posteriormente sigue la sección |
| 154 | +que identifica a qué ((servidor)) estamos solicitado el documento. La |
| 155 | +última sección es una cadena de ruta que identifica el documento especifico |
| 156 | +(o _((recurso))_) que nos interesa. |
| 157 | + |
| 158 | +Las computadoras conectadas a internet obtienen una _((dirección IP))_, que |
| 159 | +es un número que puede utilizado para enviar mensajes a esa computadora, ese |
| 160 | +número se ve así `149.210.142.219` o así `2001:4860:4860::8888`. Pero |
| 161 | +números casi aleatorios son dificiles de recordar y es raro para escribirlos, |
| 162 | +así que en lugar de eso puedes registrar un _nombre de ((dominio))_ para |
| 163 | +un una dirección específica o un conjunto de direcciones. Yo registré |
| 164 | +_eloquentjavascript.net_ para apuntar a una dirección IP de una computadora |
| 165 | +que controlo y así puedo usar ese nombre de dominio para entregar páginas |
| 166 | +web. |
| 167 | + |
| 168 | +{{index browser}} |
| 169 | + |
| 170 | +Si escribes esa URL en la ((barra de dirección)) del navegador, el navegador |
| 171 | +intentará obtener y mostrar el document en esa URL. Primero, el navegador |
| 172 | +tiene que encontrar la dirección a la que _eloquentjavascript.net_ se |
| 173 | +refiere. Entonces, utilizando el protocolo ((HTTP)), hará una conexión |
| 174 | +al servidor en esa dirección y solicitará el recurso _/13_browser.html_. |
| 175 | +Si todo sale bien, el servidor envía de vuelta un documento, que el |
| 176 | +navegador muestra en la pantalla. |
| 177 | + |
| 178 | +## HTML |
| 179 | + |
| 180 | +{{index HTML}} |
| 181 | + |
| 182 | +{{indexsee "Hypertext Markup Language", HTML}} |
| 183 | + |
| 184 | +HTML, que significa _Lenguaje de Marcado de Hipertexto_ (en inglés |
| 185 | +Hypertext Markup Language), es el formato de documento utilizado |
| 186 | +para páginas web. Un documento HTML contiene ((texto)), así como |
| 187 | +((etiqueta))s que dan estructura al texto, describiendo elementos |
| 188 | +como enlaces, párrafos y encabezados. |
| 189 | + |
| 190 | +Un pequeño documento HTML puede verse así: |
| 191 | + |
| 192 | +```{lang: "text/html"} |
| 193 | +<!doctype html> |
| 194 | +<html> |
| 195 | + <head> |
| 196 | + <title>Mi página de inicio</title> |
| 197 | + </head> |
| 198 | + <body> |
| 199 | + <h1>Mi página de inicio</h1> |
| 200 | + <p>Hola, mi nombre es Marijn y esta es mi página de inicio.</p> |
| 201 | + <p>También escribí un libro! Léelo |
| 202 | + <a href="http://eloquentjavascript.net">aquí</a>.</p> |
| 203 | + </body> |
| 204 | +</html> |
| 205 | +``` |
| 206 | + |
| 207 | +{{if book |
| 208 | + |
| 209 | +Así es como el documento se vería en el navegador: |
| 210 | + |
| 211 | +{{figure {url: "img/home-page.png", alt: "My home page",width: "6.3cm"}}} |
| 212 | + |
| 213 | +if}} |
| 214 | + |
| 215 | +{{index [HTML, notation]}} |
| 216 | + |
| 217 | +Las etiquetas, encerradas entre ((paréntesis angulares)) (`<` y `>`, |
| 218 | +los símbolos para _Menor qué_ y _Mayor qué_), proveen información acerca |
| 219 | +de la ((estructura)) del documento. El otro ((texto)) es sólo texto |
| 220 | +plano. |
| 221 | + |
| 222 | +{{index doctype, version}} |
| 223 | + |
| 224 | +El documento inicia con `<!doctype html>`, eso le indica al navegador |
| 225 | +que interprete la página como HTML _moderno_, no como distintos lenguajes |
| 226 | +que fueron utilizados en el pasado. |
| 227 | + |
| 228 | +{{index "head (HTML tag)", "body (HTML tag)", "title (HTML tag)", "h1 (HTML tag)", "p (HTML tag)"}} |
| 229 | + |
| 230 | + |
| 231 | +Los documentos HTML tienen un encabezado y un cuerpo. El encabezado |
| 232 | +contiene información _acerca del_ documento, y el cuerpo contiene |
| 233 | +el documento en sí. En este caso, el encabezado declara que el título |
| 234 | +del documento es "Mi página de inicio" y que está utilizando la |
| 235 | +codificación UTF-8, que es una forma de codificar texto Unicode como |
| 236 | +información binaria. El cuerpo del documento contiene un encabezado |
| 237 | +(`<h1>`, que significa "encabezado 1", `<h2>` a `<h6>` produce |
| 238 | +sub-encabezados) y dos ((párrafo))s (`<p>`). |
| 239 | + |
| 240 | +{{index "href attribute", "a (HTML tag)"}} |
| 241 | + |
| 242 | +Las etiquetas vienen en distintas formas. Algunos ((elemento))s, como el cuerpo, |
| 243 | +un párrafo, o un enlace, se inicia por una _((etiqueta de apertura))_ como |
| 244 | +`<p>` y finaliza con una _((etiqueta de cierre))_ como `</p>`. Algunas |
| 245 | +etiquetas de apertura, como la utilizada para los enlaces, (`<a>`), |
| 246 | +contienen información extra en forma de pares `name="value"`. Estos |
| 247 | +se llaman _((atributos))_. En este caso, el destino del enlace |
| 248 | +está indicado con `href="http://eloquentjavascript.net"`, donde |
| 249 | +`href` significa "referencia de hipertexto". |
| 250 | + |
| 251 | +{{index "src attribute", "self-closing tag", "img (HTML tag)"}} |
| 252 | + |
| 253 | +Algunos tipos de ((etiqueta))s no encierran nada, y por lo tanto no |
| 254 | +necesitan ser cerradas. La etiqueta meta `<meta charset="utf-8">` |
| 255 | +es un ejemplo de esto. |
| 256 | + |
| 257 | +{{index [escaping, "in HTML"]}} |
| 258 | + |
| 259 | +Para poder incluir paréntesis angulares en el texto de un documento, |
| 260 | +aunque tengan un significado especial en HTML, otra forma de notación |
| 261 | +especial tiene que ser introducida. Un paréntesis angular de apertura |
| 262 | +es escrito como `<` (menor qué del inglés less than), y un |
| 263 | +paréntesis angular de cierre es escrito como `>` (mayor qué del |
| 264 | +inglés greater than). En HTML, un ampersand (`&`) seguido por un nombre |
| 265 | +o código de caracter, y un punto y coma (`;`) es llamado una _((entidad))_ |
| 266 | +y será reemplazada por el caracter que codifica. |
| 267 | + |
| 268 | +{{index ["backslash character", "in strings"], "ampersand character", "double-quote character"}} |
| 269 | + |
| 270 | +Esto es análogo a la forma en que las diagonales invertidas son |
| 271 | +utilizadas en las cadenas en JavaScript. Ya que este mecanismo le |
| 272 | +da a los carácteres ampersand un significado especial, también, |
| 273 | +tienen que ser escapadas como `&`. Dentro de los valores de los |
| 274 | +atributos, que son encerrados en comillas dobles, `"` pueden ser |
| 275 | +utilizados para insertar un carácter de comillas. |
| 276 | + |
| 277 | +{{index "error tolerance", parsing}} |
| 278 | + |
| 279 | +HTML es analizado en una forma tolerante a errores. Cuando las etiquetas |
| 280 | +que deberían estar ahí no están, el navegador las reconstruye. La forma |
| 281 | +en que esto se realiza está estandarizado, y puedes confiar en que |
| 282 | +todos los navegadores modernos lo realizarán de la misma manera. |
| 283 | + |
| 284 | +El siguiente documento será tratado identicamente al mostrado anteriormente: |
| 285 | + |
| 286 | +```{lang: "text/html"} |
| 287 | +<!doctype html> |
| 288 | +
|
| 289 | +<meta charset=utf-8> |
| 290 | +<title>Mi página de inicios</title> |
| 291 | +
|
| 292 | +<h1>Mi página de inicio</h1> |
| 293 | +<p>Hola, mi nombre es Marijn y esta es mi página de inicio. |
| 294 | +<p>También escribí un libro! Léelo |
| 295 | + <a href=http://eloquentjavascript.net>aquí</a>. |
| 296 | +``` |
| 297 | + |
| 298 | +{{index "title (HTML tag)", "head (HTML tag)", "body (HTML tag)", "html (HTML tag)"}} |
| 299 | + |
| 300 | +Las etiquetas `<html>`, `<head>` y `<body>` fueron removidas completamente. |
| 301 | +El navegador sabe que `<meta>` y `<title>` pertenecen al encabezado y |
| 302 | +`<h1>` significa que el cuerpo del documento ha iniciado. Además, |
| 303 | +los párrafos no se están cerrando explícitamente ya que el abrir un |
| 304 | +nuevo párrafo o finalizar el documento los cierra implicitamente. |
| 305 | +Las comillas alrededor de los valores de los atributos tampoco están. |
| 306 | + |
| 307 | +Este libro generalmente omitirá las etiquetas `<html>`, `<head>` y `<body>` |
| 308 | +de los ejemplos para mantenerlos cortos. Pero cerraré etiquetas e incluiré |
| 309 | +comillas alrededor de los atributos. |
| 310 | + |
| 311 | +{{index browser}} |
| 312 | + |
| 313 | +Usualmente omitiré las declaraciones ((doctype)) y `charset`. Eso |
| 314 | +no significa que tu tienes que hacer lo mismo. Los navegadores |
| 315 | +puede llegar a hacer cosas ridiculas cuando las omites. Siempre |
| 316 | +considera que las declaraciones ((doctype)) y `charset` están ahí |
| 317 | +implicitamente en los ejemplos, incluso cuando no se muestran en el |
| 318 | +texto. |
| 319 | + |
| 320 | +{{id script_tag}} |
0 commit comments