From ed0290e76c2f291dc08b9bfb62f844497a0e2054 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Fri, 11 May 2018 11:42:02 +0800 Subject: [PATCH] 13. --- 13.md | 74 ++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 43 insertions(+), 31 deletions(-) diff --git a/13.md b/13.md index 366be9b..832e0a7 100644 --- a/13.md +++ b/13.md @@ -1,14 +1,14 @@ ## 十三、浏览器中的 JavaScript -> The browser is a really hostile programming environment. +> Web 背后的梦想是公共信息空间,其中我们通过共享信息进行交流。 其普遍性至关重要:超文本链接可指向任何东西,无论是个人的,本地的还是全球的,无论是草稿还是高度润色的。 > -> Douglas Crockford, The JavaScript Programming Language (video lecture) +> Douglas Crockford,《JavaScript 编程语言》(视频讲座) -本书接下来的内容将会介绍有关Web浏览器的内容。可以说,没有浏览器,就没有JavaScript。就算有,估计也不会有多少人去关心这门编程语言。 +本书接下来的章节将会介绍 Web 浏览器。可以说,没有浏览器,就没有JavaScript。就算有,估计也不会有多少人去关心这门编程语言。 Web技术自出现伊始,其演变方式和技术上就是以分散的方式发展的。许多浏览器厂商专门为其开发新的功能,有时这些新功能被大众采纳,有时这些功能被其他功能所代替,最终形成了一套标准。 -这种发展模式是把双刃剑。一方面,不会有一个集中式的组织来管理技术的演进,取而代之的是一个包含多方利益集团的松散协作架构(偶尔会出现对立)。另一方面,互联网这种无计划的发展方式所开发出来的系统,其内部很难实现一致性。事实上,有些技术看起来会十分混乱而且互相矛盾。 +这种发展模式是把双刃剑。一方面,不会有一个集中式的组织来管理技术的演进,取而代之的是一个包含多方利益集团的松散协作架构(偶尔会出现对立)。另一方面,互联网这种无计划的发展方式所开发出来的系统,其内部很难实现一致性。事实上,它的一些部分令人疑惑,并且毫无设计。 ### 12.1 网络和Internet @@ -20,11 +20,18 @@ Web技术自出现伊始,其演变方式和技术上就是以分散的方式 网络协议描述了一种网络通信方式。网络协议非常多,其中包括邮件发送、邮件收取和邮件共享,甚至连病毒软件感染控制计算机都有相应的协议。 -比如说,一个简单的聊天协议可能由两台机器组成,一台机器发送表示文本“CHAT”的位数据,另一台机器回复“OK”以确认其已经理解了该协议。接着他们可以继续向对方发送文本字符串,或通过网络读取对方发送过来的文本,并将发送与读取到的信息显示在各自屏幕上。 +例如,HTTP(超文本传输协议,Hypertext Transfer Protocol)是用于检索命名资源(信息块,如网页或图片)的协议。 它指定发出请求的一方应该以这样的一行开始,命名资源和它正在尝试使用的协议的版本。 -大多数协议都是根据其他协议开发出来的。在我们这个聊天协议的例子中,我们将网络当作可以写入位数据的流设备,而这些数据会以正确的顺序到达正确的目的地。要完成这些功能需要非常复杂的技术才能解决。 +``` +GET /index.html HTTP/1.1 +``` -传输控制协议(Transmission Control Protocol,TCP)就可以帮助我们解决该问题。所有连接到互联网的设备都会使用到这种协议,而多数互联网通信都构建在这种协议之上。 +有很多规则,关于请求者在请求中包含更多信息的方式,以及另一方返回资源并打包其内容的方式。 我们将在第 18 章中更详细地观察 HTTP。 + +大多数协议都建立在其他协议之上。 HTTP 将网络视为一种流式设备,您可以将位放入这些设备,并使其按正确的顺序到达正确的目的地。 我们在第 11 章]中看到,确保这些事情已经是一个相当困难的问题。 + + +TCP(传输控制协议,Transmission Control Protocol)就可以帮助我们解决该问题。所有连接到互联网的设备都会使用到这种协议,而多数互联网通信都构建在这种协议之上。 TCP连接的工作方式是一台电脑必须等待或者监听,而另一台电脑则开始与之通信。一台机器为了同时监听不同类型的通信信息,会为每个监听器分配一个与之关联的数字(我们称之为端口)。大多数协议都指定了默认使用的端口。例如,当我们向使用SMTP协议发送一封邮件时,我们需要通过一台机器来发送邮件,而发送邮件的机器需要监听端口25。 @@ -36,33 +43,32 @@ TCP连接的工作方式是一台电脑必须等待或者监听,而另一台 万维网(World Wide Web,不要将其与Internet混淆)是包含一系列协议和格式的集合,允许我们通过浏览器访问网页。词组中的Web指的是这些页面可以轻松地链接其他网页,因此最后可以连接成一张巨大的网,用户可以在网络中浏览。 -你只需将一台计算机连接到Internet并监听80端口,然后利用超文本传输协议(Hyper Text Transfer Protocol,HTTP)就可以在Web上创建新的内容。其他计算机可以通过网络,并使用HTTP协议获取其他计算机上的文件。 +你只需将一台计算机连接到Internet并使用 HTTP 监听80端口,就可以成为Web的一部分。其他计算机可以通过网络,并使用HTTP协议获取其他计算机上的文件。 网络中的每个文件都能通过唯一资源定位符(Universal Resource Locator,URL)访问,如下所示: ``` - http://eloquentjavascript.net/12_browser.html + http://eloquentjavascript.net/13_browser.html | | | | protocol server path ``` 该地址的第一部分告诉我们URL使用的是HTTP协议(加密的HTTP连接则使用https://来表示)。第二部分指的是获取文件的服务器地址。第三部分是我们想要获取的具体文件(或资源)的路径。 -每台连接到互联网的计算机都可以得到唯一的IP地址,IP的形式是37.187.37.82。你可以直接使用IP作为URL中的服务器名。但想记住并输入这一串或多或少随机的数字是很困难的,因此你可以注册一个域名来指向特定机器或一组机器。我注册了eloquentjavascript.net,并将其指向我的机器的IP地址,因此读者可以使用该域名访问Web页面。 +连接到互联网的机器获得一个_IP地址_,该地址是一个数字,可用于将消息发送到该机器的,类似于`"149.210.142.219"`或`"2001:4860:4860::8888"`。 但是或多或少的随机数字列表很难记住,而且输入起来很笨拙,所以你可以为一个特定的地址或一组地址注册一个域名。 我注册了`eloquentjavascript.net`,来指向我控制的机器的 IP 地址,因此可以使用该域名来提供网页。 -如果你在浏览器地址栏中输入上面提到的URL,浏览器会尝试获取并显示该URL对应的文档。首先,你的浏览器需要找出域名eloquentjavascript.net指向的地址。然后使用HTTP协议,连接到该地址处的服务器,并请求/12_browser.html这个资源。 - -我们将会在第17章中详细介绍HTTP协议。 +如果你在浏览器地址栏中输入上面提到的URL,浏览器会尝试获取并显示该URL对应的文档。首先,你的浏览器需要找出域名eloquentjavascript.net指向的地址。然后使用HTTP协议,连接到该地址处的服务器,并请求/13_browser.html这个资源。如果一切顺利,服务器会发回一个文档,然后您的浏览器将显示在屏幕上。 ### 12.3 HTML HTML,即超文本标记语言(Hypertext Markup Language),是在网页中得到广泛使用的文档格式。HTML文档不仅包含文本,还包含了标签,用于说明文本结构,描述了诸如链接、段落、标题之类的元素。 -一个简单的HTML文档如下所示: +一个简短的HTML文档如下所示: ```html
+)。 +HTML文档有头部(head)和主体(body)。头部包含了文档信息,而主体则包含文档自身。在本例中,头部将文档标题声明为“My home page”,并使用 UTF-8 编码,它是将 Unicode 文本编码为二进制的方式。文档的主体包含标题(
)。 -标签有几种形式。一个元素,比如文档体、段落或链接以一个起始标签(比如
)开始,并以一个闭合标签(比如
)结束。一些起始标签,比如一个链接(),会包含一些额外信息,其形式是name="value"这种键值对,我们称之为属性。在本例中,使用属性href="[http://eloquent javascript.net](http://eloquent%20javascript.net)"指定链接的目标,其中href表示“超文本链接(Hypertext Reference)”。 +标签有几种形式。一个元素,比如主体、段落或链接以一个起始标签(比如)开始,并以一个闭合标签(比如
)结束。一些起始标签,比如一个链接(),会包含一些额外信息,其形式是name="value"这种键值对,我们称之为属性。在本例中,使用属性href="[http://eloquent javascript.net](http://eloquent%20javascript.net)"指定链接的目标,其中href表示“超文本链接(Hypertext Reference)”。 -某些类型的标签不会包含任何元素,这种标签不需要闭合。比如