《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 12 章 万维网 阅读笔记 15

发布时间:2026/10/15 7:38:18

《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 12 章 万维网 阅读笔记 15 《计算机是如何工作的人人都能懂的计算机软硬件工作原理》第 12 章 万维网 阅读笔记 1512.2 网络语言任何能以文件形式保存的内容都可以托管到网络上。例如网络服务器可以托管 Excel 文件集合它们可以从网站下载并用 Excel 打开。但是网络浏览器并不只是一个下载文件以便在其他应用程序中打开文件的工具。网络浏览器不仅能下载内容还能显示网页。这些网页可以是简单的文档也可以是交互式网络应用程序。为了实现这一点浏览器要理解三种用于构建网站的计算机语言超文本标记语言 (HyperText Markup LanguageHTML) 定义网页结构。换句话说它定义了网页上的内容。例如HTML 可以指定网页上存在的一个按钮。级联样式表 (Cascading Style SheetCSS) 定义网页的外观。换句话说它定义了网页的样子。例如CSS 可以指定上面说的按钮宽 30 个像素颜色为蓝色。JavaScript 定义网页的行为。换句话说它定义了网页的功能。例如在单击按钮的时候可以使用 JavaScript 将两数相加。这三种语言一起使用便可创建网络的内容。值得注意的是网络浏览器也能够呈现一些其他的数据类型特别是某些图像、视频和音频数据但我们不对此进行详细讨论。现在让我们深入研究一下这三种基本网络语言HTML、CSS 和 JavaScript。12.2.1 用 HTML 构造网络HTML 是一种描述网页结构的标记语言。请注意HTML 不是编程语言。编程语言描述计算机应执行的操作而标记语言描述数据的结构。对于 HTML 来说所讨论的数据表示网页。一个网页可以包含各种元素比如段落、标题和图像。下面的例子用HTML描述了一个简单的网页。你会看到许多项目被包含在小于号 () 和大于号 () 中。它们被称为 HTML 标签是一组用于定义 HTML 文档各部分的文本字符。例如是用于指示段落开始的标签。相应的是用于指示段落结束的标签。注意结束标签中的斜杠它把结束标签与开始标签区别开来。HTML 元素是页面的一部分以开始标签开头以结束标签结尾在这两个标签之间的是内容。例如这是一个 HTML 元素This is a cat.。实际上并非所有元素都需要结束标签。例如用于表示图像的 img 元素就不需要结束标签。你可以在前面的 HTML 代码示例中看到这一点。图 12-5 展示了示例 HTML 是如何在网络浏览器中呈现的。图 12-5 我们的网页示例在网络浏览器中的呈现文档中特意没有包含如何显示的信息所以浏览器对标题和段落使用了默认字体和字号。在本例中浏览器还默认显示为白底黑字——同样这也没有在文档中指定。由于这个 HTML 例子没有包含样式信息因此不同的浏览器可以选择略微不同的样式来呈现这个网页。让我们更细致地来看看HTML代码示例。HTML文档的第一行声明该文件是HTML文档。在这下面HTML文档被构造成有父元素和子元素的树形结构。标签是顶级父标签所有内容都被包含在和之间。你可以把这两个标签解释为“HTML从这里开始”以及“HTML在这里结束”​。这是有道理的—HTML文档中的所有内容都应该是HTML标签还包含一个名为lang的属性它把本文档的语言标识为en即英文的代码。html 元素有两个子元素head 和 body。包含在 和 之间的元素描述了文档而包含在 和 之间的元素则构成了文档的内容。在我们的例子中head 包含了两个元素描述文档编码所用字符集的 meta 元素和 title 元素。浏览器通常会在页面的标签栏上显示 title 文本并在用户添加书签或收藏时把它当作默认名称。搜索引擎在显示结果时使用 title 文本。出于这些原因网络开发人员给他们的网页赋予有意义的标题是很重要的。本例中的 body正文包含一个 h1 标签它用于标题元素。标题标签从 h1 到 h6 都可用其中 h1 用作各部分标题的最高级别h6 为最低级别。标题的后面是段落用标签来指示段落的后面是用 表示的图像。注意图像自身的字节数没有出现在 HTML 中。相反 标签只是用相对 URL (cat.jpg) 引用了一个图像文件。要完整加载这个网页浏览器需要发出单独的 HTTP 请求来下载这个图像。本例中这个图像 URL 只是一个文件名表示它正驻留在与文档本身相同的服务器和路径中。如果图像驻留在别的地方就要使用带路径或服务器名的 URL。标签还有一个 alt 属性它提供了描述该图像的替代文本。这是在图像无法呈现的情况下使用的例如当使用纯文本浏览器或大声朗读页面内容的屏幕阅读器时。你可能已经注意到前面的 HTML 代码用缩进来显示页面上各种元素的嵌套。例如标签 h1 和 p 是同一缩进级别的这表示它们是 body 标签的子元素。这在网络开发中是常见做法用于改善HTML的可读性但它不是必需的。实际上在 HTML 文档中我们可以移除所有额外的空格符、制表符和换行符把 HTML 代码都留在一行中文档还是会以相同的方式在浏览器中显示。网络浏览器会忽略多余的空白所以在网页上分隔元素只对开发人员有帮助。到目前为止我们介绍的 HTML 元素仅占网络浏览器能识别的全部元素的一小部分。我们不会在这里详尽地介绍 HTML网上有很多很好的资料可供参考。HTML 规范以前由两个组织维护W3C万维网联盟和 WHATWG网络超文本应用技术工作组​。上一个从 W3C 获得“推荐”状态的主要 HTML 版本是 HTML5。2019 年这两个组织一致认为持续进行的 HTML 标准开发将主要由 WHATWG 处理它被称为 HTML Living Standard这个标准会一直被维护。现代浏览器试图同时支持当前版本和旧版本的 HTML因为许多网络内容都是按照早期 HTML 标准编写的。过去浏览器引入了非标准的 HTML 元素其中的一些最终标准化了而另一些则不再使用且失去了支持。网络浏览器开发人员必须在创新和坚持标准之间取得平衡并且还要支持有时在网络上发现的、不那么完美的 HTML。网络浏览器在不断发展不同的浏览器有时会以不同的形式呈现相同的内容。这就意味着网络开发人员要定期在多个浏览器上测试他们的工作以确保行为一致。12.2.2 用 CSS 设计网络样式在前面的 HTML 例子中我们使用标签描述文档的结构但这些标签不能传递任何关于应如何显示文档的信息。这是有意为之的我们希望保持结构与样式各自独立。两者之间的分离使得相同的内容在不同的环境中能以不同的样式予以呈现。例如在较大的 PC 屏幕上和较小的移动屏幕上大多数网络内容应以不同的形式呈现。级联样式表 (CSS) 是用于描述网页样式的语言。样式表是规则列表。每个规则描述了应用于页面特定部分的样式。每个规则都包含一个选择器它指示页面上的哪些元素要应用样式。​“级联” 一词是指对同一个元素应用多个规则的功能。让我们来看个例子这个例子为段落 § 元素和标题 (h1) 元素定义了样式规则。当这个 CSS 应用于网页时该网页上的所有段落都使用指定字体字号为 11 磅左边距为 10 个像素文本为灰色。同样h1 标题使用指定的加粗字体字号为 18 磅。注意font-family 是字体列表不是单个字体。这意味着网络浏览器应该尝试找到匹配的字体从最左边的字体开始一直向右直到找到匹配的字体为止。并不是每个客户端设备都安装了首选字体指定多个字体可增加可用匹配字体的机会。你可以通过多种方法把样式表应用于网页。其中的一个方法是在网页的 style 元素中包含 CSS 规则。例如这不是理想方法因为样式和结构在这里是密切相关的。更好的方法是在单独的文件中指定 CSS 规则并将其托管到网络上。这种方法让 HTML 和 CSS 完全分开并且允许多个 HTML 文件使用相同的样式表。通过这种方式我们可以改变 CSS 规则并将它一次性应用到多个页面。HTML head 部分中的 单个元素 可以被应用 一个CSS文件的 样式表规则如下所示style.css 是要应用的 CSS 文件的 URL​如果把这个样式表应用到示例猫咪网页上我们会看到标题和段落文本的改变如图 12-6 所示。图 12-6 应用了 CSS 的示例网页12.2.3 用 JavaScript 编写网络脚本网络最初被设想为通过超文本文档共享信息的一种方式。HTML 赋予我们这种能力CSS 赋予我们控制这些文档表现形式的方法。但是网络进化成了一种交互内容的平台JavaScript 成为实现交互的标准手段。JavaScript 是一种编程语言它能让网页响应用户行为并以编程方式执行各种任务。使用 JavaScript网络浏览器不仅成了文档阅读器还成了一个完整的应用程序开发平台。JavaScript 是解释语言在交付给浏览器之前它不会被编译成机器码。网络服务器以文本形式托管 JavaScript 代码浏览器下载该代码并在运行时进行解释。也就是说一些浏览器 使用 在运行时 编译 JavaScript 的即时 (Just-In-TimeJIT) 编译器从而提高了性能。有些开发人员在部署其 JavaScript 脚本之前会将其缩小删除空格和注释——通常这会减小脚本。缩小 JavaScript 脚本可以缩短网站的加载时间。缩小脚本与编译脚本不同缩小后的文件仍然是高级代码而不是编译后的机器码。JavaScript 的语法类似于 C 语言以及其他从 C 借鉴的语言比如 C、Java 和 C#​。但是相似只是表面因为 JavaScript 与这些语言有很大的不同。不要让名称迷惑了你JavaScript 与 Java 没什么关系。这个语言是面向对象的但本质上依赖的是原型而不是类。也就是说是现有的对象而不是类充当了其他对象的模板。JavaScript 用浏览器提供的页面表现形式与 HTML 网页进行交互这种形式被称为文档对象模型 (Document Object ModelDOM)。DOM 是页面元素的分层树结构可以通过编程进行修改。在 DOM 中更新一个元素会导致浏览器更新显示的网页上的元素。JavaScript 包含处理 DOM 的方法通过这些方法JavaScript 代码既可以响应页面上发生的事件比如单击一个按钮​也可以改变被呈现页面的内容。让我们来看一个简单脚本的部分内容这个脚本与我们的示例页面进行交互。脚本在每次单击或在触摸屏上单击猫咪照片时就向页面的段落添加文本 Meow!。这里的第一行添加了一个事件处理程序它会在单击猫咪照片时运行。这个事件处理程序代码的定义在第二行它告诉浏览器在段落上添加文本 Meow!。由于被定义为事件处理程序代码只会在单击图片事件发生时才会运行。请注意这个脚本通过 IDcat-photo和cat-para分别引用了照片和段落。HTML 元素可以被赋予 ID这使得我们能轻松地以编程方式来引用它们。只有把这些 ID 添加到 HTML脚本才能工作。下面是更新后的 HTML它引用了脚本名为 cat.js并添加了所需的 ID在脚本代码被保存为 cat.js 且 HTML 如上所示更新后重新加载该页面并单击会在段落上附加文本Meow!的猫咪照片。如果我们多次单击该照片最后就会得到如图 12-7 所示的内容。图 12-7 运行附加文本的 JavaScript 代码后的示例网页JavaScript 可以用于构建在网络浏览器上运行的完整的应用程序。前面的例子只是对其功能的一个尝试。规范 ECMAScript 对 JavaScript 进行了标准化。各种浏览器实现的脚本引擎都尝试遵守全部或部分的 ECMAScript 标准该标准会定期更新。12.2.4 用 JSON 和 XML 构造网络数据网站并不是网络上唯一可用的内容类型。网络服务通过 HTTP 提供数据并希望以编程方式与之交互。这与返回 HTML以及相关资料的网站相反那些网站的意图是通过网络浏览器供用户使用。大多数最终用户从不直接与网络服务交互尽管我们使用的网站和应用程序通常是由网络服务提供支持的。想象一下你运营着一个网站上面有关于在你的城市演出的本地乐队的信息。这个网站包含每个乐队的简介——乐队成员、背景、乐队演出地点等。最终用户可以访问你的网站并轻松了解他们喜欢的音乐家的信息。现在假设一位应用程序开发人员找到你他想在自己的应用程序中包含出自你网站的最新信息。但是这个应用程序有自己的呈现方式且完全不同于你的网页——这名开发人员并不想只在应用程序中显示你的网页。他们需要一种方法来获取你网站的基础数据。他们可能会尝试编程读取你的网页并提取相关信息但这个过程既复杂又容易出错特别是如果你的网站布局还发生了变化。你可以通过以下方式让这位开发人员的工作轻松很多向他提供网络服务以 HTML 之外的格式显示你网站的数据。尽管 HTML 确实提供了某种结构但它的结构描述的是文档标题、段落等​而对文档所引用的数据类型说明甚少。HTML 对人类阅读者而言是有意义的但对软件而言则是难以解析的。那么网络服务应该用什么格式来表示乐队数据结构呢当前网络服务使用的最常见的通用数据格式是 XML 和 JSON。扩展标记语言 (eXtensible Markup LanguageXML) 自 20 世纪 90 年代以来就已经存在它是一种在网络上交换数据的流行方法。和 HTML 一样它是基于文本的标记语言但它没有一组预定义的标签XML 允许自定义标签来描述数据。在我们虚构的乐队信息服务中我们可以定义一个 标签和一个 标签。我们来看一下使用 XML 描述的假想乐队如你所见特定的 XML 标签和它们的属性是按照我们的需求量身定制的而开始标签、结束标签和树形层次结构等通用结构则遵循了类似于HTML 的模式。XML 的灵活性即标签可以任意定义意味着 XML 的生产者和消费者都需要就预期标签及其含义达成一致。HTML 也是如此但在使用 HTML时是各方就标准达成一致。对于 XML只有通用格式是标准化的而特定标签可以不同。XML 是在网络上共享数据的一种流行方法很多网络服务使用 XML 作为它们呈现数据的主要方式。但是XML 很烦琐正确地解析它可能会很棘手。JavaScript 对象表示法 (JavaScript Object NotationJSON) 与 XML 一样是一种以文本格式描述数据的方法。JSON 避免使用标记标签而是采用一种类似于描述对象的 JavaScript 语法的样式由此得名。在 JSON 中对象被放在大括号中数组对象的集合被放在方括号中。它的语法比 XML 更简洁这有助于减少在网络上传递的数据量。JSON 的流行始于 21 世纪 10 年代当时它开始取代 XML 成为新网络服务的首选数据格式。下面是用 JSON 描述的同一个假想乐队XML 和 JSON 都忽略多余的空格所以就像使用 HTML 一样我们可以删除多余的空格符、制表符和换行符而不会影响到数据的解释。这样做会产生相当紧凑的数据呈现形式特别是在使用 JSON 的时候。XML 和 JSON 不是用于在网络浏览器中直接呈现的格式。在某些浏览器中打开 JSON 和 XML 内容可能导致浏览器显示一些东西可能是数据的轻量级格式化版本​但实际上 JSON 和 XML 并不打算被浏览器直接使用。它们意在被代码阅读而这些代码又用数据做一些有用的事情。在我们的例子中代码可能是智能手机应用程序该程序显示正在附近演出的乐队的信息。此外代码也可能是客户端 JavaScript它把 JSON转换成 HTML 以供浏览器显示。12.3 网络浏览器现在我们已经介绍了用于描述网络的语言接下来我们来看网络客户端的软件即网络浏览器。第一个网络浏览器被称为 WorldWideWeb不要与本章主题搞混​。它由 Tim Berners- Lee 在 1990 年开发。第一个浏览器是第一个网络服务器 CERN httpd 的客户端。几年后WorldWideWeb 被 Mosaic 取代Mosaic 是一种帮助普及网络的浏览器。之后发布的主要浏览器是 Netscape Navigator它也有大量的追随者。1955 年微软发布了它们的第一款浏览器 Internet Explorer它是 Netscape Navigator 的直接竞争者成了那个时代占主导地位的浏览器。如今浏览器的格局发生了巨大的变化在撰写本书时占主导地位的浏览器是 Google Chrome、Apple Safari 和 Mozilla Firefox。12.3.1 渲染页面现在让我们来看看网络浏览器渲染页面的过程。对网站的典型访问从对网站默认页面如http://www.example.com/的请求或者对该网站特定页面如http://www.example.com/animals/cat.html的请求开始。用户可以直接在地址栏中输入这个 URL也可以通过链接到达这个 URL。不管是哪种情况浏览器都会请求这个特定 URL 上的内容。假设这个 URL 是有效的且以网页形式呈现那么服务器将使用 HTML 进行响应。网络浏览器必须返回 HTML并生成网页的 DOM 表示。HTML 可以包含对其他资源比如图像、脚本和样式表的引用。这些资源都有自己的 URL浏览器对每个资源发出单独的请求如图 12-8 所示。图 12-8 网络浏览器请求页面及其引用的资源在浏览器检索到该网页的各种资源后它就会显示 HTML用指定的 CSS 来确定合适的表现形式。所有脚本都交给 JavaScript 引擎运行。JavaScript 代码可以立即对页面进行修改也可以注册事件处理程序以便之后在某个事件发生时运行。JavaScript 代码还可以从网络服务请求数据并使用该数据更新页面。网络浏览器包含一个渲染引擎用于 HTML 和 CSS​、一个 JavaScript 引擎和一个把内容联系起来的用户界面。尽管用户界面提供了浏览器自身的外观和感觉比如后退按钮和地址栏的外观​但决定网站表现形式与行为包括网页如何布局以及如何响应输入的却是渲染引擎和 JavaScript 引擎。由于每个渲染引擎和 JavaScript 引擎处理事情的方式略有差异当用不同浏览器访问网页时其外观和行为可能会有所不同。理想情况下所有的浏览器应该以同样的方式呈现内容这完全符合网站开发人员的预期但情况并非总是如此。在撰写本书时只有 3 款主要的渲染引擎处于积极开发过程中WebKit、Blink 和 Gecko。WebKit 是 Apple Safari 浏览器的渲染引擎和 JavaScript 引擎。它也用于 iOS App 商店中的应用程序因为苹果公司要求所有显示网络内容的iOS 应用程序都使用这个引擎。Blink 是 WebKit 的一个分支它是 Chromium 开源项目的渲染引擎该项目还包括了 V8JavaScript 引擎。Chromium 是 Google Chrome 和Opera 的基础。2018 年 12 月微软宣布 Microsoft Edge 浏览器也将基于 Chromium它选择停止开发自己的渲染引擎和 JavaScript 引擎。这就只剩下一个主流浏览器没有追溯到 WebKit——Mozilla Firefox它有自己的 Gecko 渲染引擎和 SpiderMonkey JavaScript 引擎。注意当开发人员复制了一个项目的源代码然后对这个副本进行修改时就会产生软件分支。这允许原始项目和分支项目作为各自独立的软件而共存。12.3.2 用户代理字符串网络浏览器正式的技术性术语是 “用户代理” (user agent)。这个术语也可以用于其他软件任何代表用户的软件​但这里我们专门讨论的是网络浏览器。这个术语出现在关于网络的技术文档中尽管它很少在正式交流之外使用。在实践中使用这个术语的一个地方是 “用户代理字符串”​。当浏览器向网络服务器提出一个请求时它通常会包括一个被称为 User-Agent 的标题值用于描述浏览器。例如下面是 Chrome版本 71在Windows 10 上发送的一个用户代理字符串这似乎是矛盾的。它们究竟是什么意思Mozilla/5.0 是早期网络的延续。Mozilla 是 Netscape Navigator 的用户代理名称许多网站专门在用户代理字符串中寻找 “Mozilla”​作为把其网站的最新版本发送到浏览器的指示符。当时其他浏览器也想要得到网站的最佳版本所以它们把自己标识为 Mozilla尽管它们根本就不是 Mozilla。快进到现在基本上每个浏览器都把自己标识为 Mozilla我们发现用户代理字符串的那个部分完全没有任何意义。接下来是渲染引擎本例中是 AppleWebKit/537.36。如前所述Chrome 的 Blink 引擎是 WebKit 的分支而且仍然把自己标识为 WebKit。后面的文本 (KHTML,like Gecko) 只是对其的进一步阐述KHTML 是 WebKit 所基于的一个传统引擎。现在我们得到了实际的浏览器名称和版本Chrome/71.0.3578.98。最后我们尴尬地提到苹果的浏览器 Safari/537.36其中包括了一些给予 Safari 特殊待遇的网站。通过包含这个文本Chrome 试图确保那些网站发给它的内容与 Safari 接收到的内容相同。这是一种相当复杂的识别 Chrome 的方法但其他浏览器也做着相同的事情以确保与各种网站的兼容性。这种复杂性是历史上在不同的浏览器和网站上分散功能的副作用这些浏览器和网站想根据特定的浏览器发送其内容的定制版本。浏览器的发展使得当前浏览器功能的变化减少。但是许多网站并没有发展它们仍然为特定的浏览器发送定制的内容这迫使现代浏览器继续欺骗旧网站让其相信它们正在与不同的浏览器进行通信。12.4 网络服务器到目前为止我们主要关注的是网络客户端使用的技术。网络浏览器使用三种常见语言HTML、CSS 和 JavaScript。那么网络服务器端呢哪些语言和技术被用来为网络服务器提供支持简单来说所有的编程语言或技术都可以用于网络服务器只要该技术可以通过 HTTP 进行通信并能以客户端理解的格式返回数据即可。一般来说网站被设计成静态的或动态的。静态网站返回提前构建的 HTML、CSS 或 JavaScript。通常这种网站的内容存储在服务器上的文件中服务器只返回这些文件的内容而无须修改。这意味着任何所需的运行时处理都必须在浏览器运行的 JavaScript 中实现。动态网站在服务器上执行处理当请求到来时生成 HTML。在网络发展的早期几乎所有的东西都是静态的。页面是简单的 HTML几乎没有交互性。随着时间的推移开发人员开始添加在网络服务器上运行的代码允许服务器返回动态内容或接受用户上传的文件及提交的表单。这种趋势仍在持续在服务器响应之前请求要经过服务器端的处理已经成为一种普遍现象。让我们来看看动态网站上的服务器端处理通常是如何工作的如图 12-9 所示。图 12-9 动态网站处理请求的典型过程假设图 12-9 中呈现的动态网站是一个博客。浏览器对博客文章发出请求。当网络服务器接收到这个对博客文章的请求后它会读取被请求的URL 并确定需要生成 HTML。然后服务器上的代码查询数据库该数据库可能在这个服务器上也可能在其他服务器上​检索相关博客文本数据把文本格式设置为HTML再用该 HTML 响应客户端。这个方法很有用因为它允许把网站的内容与网站的代码分开管理但动态网站也有一些缺点。服务器上日益增加的复杂性意味着更多的设置工作、更慢的运行时响应、服务器上潜在的沉重负载以及在安全问题上不断增加的风险。最近的一个趋势是尽可能回归静态网站。图 12-10 给出了静态网站上的页面请求过程。图 12-10 静态网站处理请求的过程如图 12-10 所示与动态网站相比静态网站的服务器端处理是简化了的。静态网站上的服务器端只返回与被请求URL相匹配的静态文件。内容是已经构建好的服务器不需要检索原始数据并对其进行格式化。降低服务器端的复杂性通常意味着更简单、更快、更安全的网站。一定要搞清楚在这个上下文中​“静态” 和 “动态” 是来自服务器的角度不是用户的角度。静态网站的内容与服务器上文件的内容相同而动态网络的内容是在服务器上生成的。这两个词不是在描述用户对网站的体验例如网站是否有交互性或者内容是否是自动更新的。这些体验可以在浏览器中用 JavaScript 来实现有时与独立的网络服务一起使用无论网站自身是静态的还是动态的。如果你托管的是静态网站那么你需要的就只有网络服务器软件它能响应对静态文件的请求并提供这些文件的内容。无须自定义代码。许多软件包和在线服务都可以用于托管静态网站。一般服务于静态网站的软件被配置成指向服务器上的文件目录当对某个文件的请求到来时服务器只需返回该文件的内容。例如如果网站的域名为 example.com它位于服务器上的 /websites/example 目录中那么对http://example.com/images/cat.jpg 的请求就会映射到 /websites/example/images/cat.jpg。网络服务器只需从本地目录中读取匹配的文件并把文件中包含的字节返回给客户端即可。如果你正在构建动态网站或网络服务则可以使用现有软件来管理内容并提供动态网页也可以编写自己的自定义代码来生成网络内容。假设你在编写自定义代码你会发现与网络开发的客户端相比服务器端的情况完全不同。**任何编程语言、操作系统和平台都可以用于网络服务器。只要网络服务器通过 HTTP 响应并以客户端理解的格式返回数据那么就可以进行任意操作**客户端不关心用什么技术生成 HTML 或JavaScript它只要求响应的格式是它能处理的。由于对于客户端来说服务器端用什么技术并不重要因此 对希望编写 在服务器端 运行的 代码的 开发人员来说 就有了许多选择。**客户端网络开发仅限于 HTML、CSS 和 JavaScript 三种而服务器端网络开发则可以使用 Python、C#、JavaScript、Java、Ruby、PHP 等。**服务器端网络开发常常包含某种数据库的接口开发。就像任何编程语言都可以用于服务器端网络开发一样任何类型的数据库都可以用于服务器端网络开发。12.5 总结本章介绍了万维网——一组分布式的、可寻址的、链接的资源由 HTTP 通过互联网进行传递。你学习了如何用 HTML 构建网页、如何用 CSS 设置样式以及如何用 JavaScript 编写脚本。我们研究了网络浏览器和网络服务器浏览器被用于访问网络上的内容服务器是托管网络资源的软件。第 13 章将介绍现代计算机的一些趋势你将有机会完成一个最终设计它把本书中的各种概念联系在一起。
延伸阅读

更多相关文章

2026/10/15 7:38:18

单词拆分与动态规划:从贪心反例到一维DP与Trie优化

"139. 单词拆分"这道题,我在给新人讲动态规划时至少讲过二十遍,每次都能看到同样的困惑:字面意思那么简单,为什么不能直接按顺序匹配?它其实就是给你一个字符串 s 和一个单词列表 wordDict,问能不…

2026/10/15 7:38:18

Python+Django构建高并发在线考试系统实践

1. 项目背景与核心需求在线考试系统已经成为现代教育信息化建设的重要组成部分。作为一名长期从事教育技术开发的工程师,我最近完成了一个基于Python的在线考试系统项目,这个系统主要解决了传统纸质考试在组织效率、防作弊、自动阅卷等方面的痛点。这个系…

2026/10/15 7:38:18

Java中this关键字的本质与应用场景详解

1. 理解this关键字的本质在Java编程中,this关键字可能是最常用却又最容易被误解的特性之一。记得我刚学习Java时,经常困惑于什么时候该用this,什么时候可以省略。直到有次在调试一个对象状态异常的bug时,才真正体会到this的关键作…

2026/10/15 8:28:28

AI漫剧六道工序:从静态图到动态剧的完整工作流

1. 为什么“一场戏走完6道工序”是AI漫剧制作真正的分水岭去年冬天,我帮一个刚入行的动画系毕业生做毕业设计,她想用AI工具做一个3分钟的校园轻喜剧短片。她花三天时间在Seedance里调出了一张特别惊艳的角色立绘——光影细腻、表情生动、校服褶皱都带着呼…

2026/10/15 8:28:28

六边形网格BFS算法在路径规划中的应用

1. 题目背景与核心需求解析这道题目来自信息学奥林匹克竞赛(OI)题库,编号P3739,属于HAOI2014省选题目。题目描述了一个探险者在金字塔内部寻找出口的路径规划问题。金字塔被建模为一个特殊的六边形网格系统,探险者需要…

2026/10/15 8:28:28

足球数据分析平台:大数据与深度学习的实战应用

1. 项目背景与核心价值足球数据分析平台这个选题很有意思,它完美结合了当下三个热门技术方向:大数据处理、深度学习算法和Web可视化。我在体育科技公司做技术顾问时,曾主导过类似的商业项目开发,发现这类系统在实际应用中能解决几…

2026/10/15 8:23:25

数据流图实战:从上下文图到0层图的完整拆解与平衡校验

简介:这是一份讲解数据流图(DFD)绘制方法的PPT教学资源,适合系统分析与设计初学者、管理信息系统课程学生,以及需要与用户沟通系统逻辑的分析人员。内容按数据流图构成、绘制步骤、绘制原则与注意事项、实例讲解等章节…

2026/10/14 11:31:03

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/14 17:41:07

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/14 2:32:55

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/15 0:02:22

防关联浏览器哪个好?三款产品实测差异解析

新手做多店铺,最纠结的就是防关联浏览器选哪个。飞跨、网易、站斧这三款被问得最多,先给结论:要一体化省心、长期便宜,选站斧;要网易招牌和稳,选网易;预算紧做东南亚 Lazada,选飞跨。…

2026/10/15 0:02:22

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成 一、技术背景 大模型(LLM)在通用场景下表现强大,但当我们将 GPT-4 或 Qwen 直接用于生成影刀RPA操作指令和 XPath 定位时,准确率通常只有 40%-60%。原因…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑