计算机网络:应用层 —— 万维网 WWW

万维网的起源

万维网的概念由蒂姆·伯纳斯-李(Tim Berners-Lee)于1989年在欧洲核子研究组织(CERN)提出。他的初衷是为了解决科学家们在跨机构合作中面临的文档共享和信息管理问题。1991年,世界上第一个网站在 CERN 上线,标志着万维网的正式诞生。

万维网 WWW(Word Wide Web)并非某种特殊的计算机网络。它是一个大规模的、联机式的信息储藏所,是运行在因特网上的一个分布式应用,是一个基于互联网(Internet)的、全球性的、交互式的、多平台的、分布式的、动态的、超文本、多媒体的信息系统。

万维网的核心思想是通过超文本(Hypertext)技术将信息连接起来,利用网页之间的超链接将不同网站的网页链接成一张逻辑上的信息网,用户可以通过点击链接在不同网页之间跳转,从而实现信息的快速获取和传播。

组成部分

  1. 超文本标记语言(HTML)HTML 是网页的结构语言,用于定义网页的内容和布局。浏览器通过解析 HTML 文件,将文本、图片、视频等元素渲染成用户可见的网页。

  2. 超文本(Hypertext):万维网的信息资源是用超文本标记语言(HTML)编写的,并通过超链接(Hyperlink)将不同的信息资源连接在一起。用户可以通过点击链接从一个页面跳转到另一个页面,实现信息的快速浏览和导航。

  3. 浏览器(Web Browser):浏览器是用户访问万维网的工具,它负责从Web服务器上获取HTML文档,并将其解析和渲染成用户可以理解的页面。常见的浏览器有谷歌的 Chrome、Mozilla 的 Firefox、苹果的 Safari 等。

  4. Web服务器(Web Server):Web 服务器是存储 HTML 文档和提供 Web 服务的计算机。当 Web 浏览器向 Web 服务器发出请求时,服务器会返回相应的 HTML 文档和其他资源(如图片、视频等)。

  5. 统一资源定位符(URL):URL是万维网上每个资源(如网页、图片、视频等)的唯一地址。它由协议(如 httphttps)、域名(如 www.example.com)和路径(如 /index.html)组成。通过 URL,浏览器可以准确地找到并访问相应的资源。

  6. HTTP协议(Hypertext Transfer Protocol)HTTP 协议是万维网上用于传输数据的协议。它定义了浏览器和服务器之间通信的规则和格式,使得浏览器可以请求和接收 HTML 文档和其他资源。

浏览器

目前比较流行的浏览器及其内核如下:

![[流行的浏览器及其内核.png]]

浏览器最重要的部分是渲染引擎,也就是浏览器内核。负责对网页内容进行解析和显示。不同的浏览器内核对网页内容的解析也有不同,因此同一网页在不同内核的浏览器里的显示效果可能不同;网页编写者需要在不同内核的浏览器中测试网页显示效果。

统一资源定位符 URL

为了方便地访问在世界范围的文档,万维网使用统一资源定位符URL指明因特网上任何种类“资源”的位置

URL的一般形式由以下四个部分组成:

U R L = < 协议 > : / / < 主机 > : < 端口 > / < 路径 > URL=<协议>://<主机>:<端口>/<路径> URL=<协议>://<主机>:<端口>/<路径>

  • 协议:指定用于访问资源的网络协议。常见的协议包括 httphttpsftp 等。

  • 主机:指定服务器的域名或IP地址。例如,www.example.com192.168.1.1

  • 端口:指定服务器上的端口号。默认情况下,HTTP使用端口80,HTTPS使用端口443。如果使用其他端口,需要明确指定。

  • 路径:指定服务器上资源的具体位置。例如,/index.html/path/to/resource

万维网的文档

万维网的文档类型多样,分为静态文档、动态文档和活动文档,满足了不同应用和需求下的内容展示和交互需求。这些文档通过 HTTP 协议在万维网服务器和客户端之间进行传输,实现了信息的快速获取和交换。

万维网的文档由以下部分组成:

![[万维网的文档.png]]

超文本传输协议 HTTP

超文本传输协议HTTP(HyperText Transfer Protocol)定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。
在这里插入图片描述

HTTP/1.0

HTTP/1.0 采用非持续连接方式。在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接,当收到响应后就立即关闭连接。每请求一个文档就要有两倍的 RTT 的开销。若一个网页上有很多引用对象(例如图片等),那么请求每一个对象都需要花费 2RTT 的时间RTT,往返时间,从发送数据开始到接收到相应确认的时间)。

为了减小时延,浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是,这会大量占用万维网服务器的资源,特别是万维网服务器往往要同时服务于大量客户的请求,这会使其负担很重。

![[HTTP1.0.png]]

HTTP/1.1

HTTP/1.1 采用持续连接方式。在该方式下,万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上引用的对象,而是只要这些文档都在同一个服务器上就行。

为了进一步提高效率,HTTP/1.1的持续连接还可以使用流水线方式工作,即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文。这样的一个接一个的请求报文到达服务器后,服务器就发回一个接一个的响应报文。这样就节省了很多个RTT时间,使TCP连接中的空闲时间减少,提高了下载文档的效率。

HTTP的报文格式

HTTP是面向文本的,其报文中的每一个字段都是一些ASCII码串,并且每个字段的长度都是不确定的

HTTP请求报文

![[HTTP的报文格式.png]]

HTTP 请求报文支持以下方法:

方法 描述
GET 请求URL指定的文档
HEAD 请求URL指定的文档的首部,但不返回文档的实际内容
POST 向服务器发送数据,通常用于提交表单或上传文件
DELETE 删除URL指定的文档
PUT 在指明的URL下存储一个文档,如果URL已存在则替换它
CONNECT 用于建立到由目标资源标识的服务器的隧道,通常用于HTTPS代理
OPTIONS 请求一些选项信息,以确定服务器支持哪些HTTP方法
TRACE 用来进行环回测试,服务器会回显收到的请求,主要用于测试或诊断
PATCH 对PUT方法的补充,用来对已知资源进行局部更新,只发送改变的部分

HTTP响应报文

![[HTTP响应报文.png]]

浏览器并不会直接显示出服务器发送来的这些状态行信息,而是以更友好的方式向用户告知服务器所返回的状态信息。

![[服务器所返回的状态信息.png]]

常见的HTTP状态码:

1xx信息性状态码):表示临时的响应,服务器已接收到请求,需要客户端继续执行操作。

状态码 类别 描述
100 信息性 继续。客户端应继续其请求。
101 信息性 切换协议。服务器根据客户端的请求切换协议。

2xx成功状态码):表示请求已成功被服务器接收、处理并响应。

状态码 类别 描述
200 成功 请求成功。一般用于GET与POST请求。
201 成功 已创建。成功请求并创建了新的资源。
202 成功 已接受。已经接受请求,但处理尚未完成。
203 成功 非授权信息。成功处理了请求,但返回的信息可能来自另一来源。
204 成功 无内容。服务器成功处理了请求,但没有返回任何内容。
205 成功 重置内容。服务器成功处理了请求,并要求客户端重置文档视图。
206 成功 部分内容。服务器成功处理了部分GET请求。

3xx重定向状态码):表示客户端需要采取进一步的操作才能完成请求。

状态码 类别 描述
300 重定向 多种选择。针对请求,服务器可执行多种操作。
301 重定向 永久移动。请求的资源已永久移动到新位置(URI)。
302 重定向 临时移动。请求的资源临时从不同的URI响应请求。
303 重定向 查看其他位置。对应当前请求的响应可以在另一个URI上被找到。
304 重定向 未修改。如果客户端发送了一个带条件的GET请求且该请求已被允许,但文档的内容并未改变,则服务器应当返回这个状态码。
307 重定向 临时重定向。请求的资源临时从不同的URI响应请求,但将来的请求仍应使用原有URI。

4xx客户端错误状态码):表示客户端可能发生了错误,导致服务器无法处理请求。

状态码 类别 描述
400 客户端错误 错误请求。由于明显的客户端错误,服务器不能或不会处理该请求。
401 客户端错误 未授权。请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
403 客户端错误 禁止。服务器理解请求客户端的请求,但是拒绝执行此请求。
404 客户端错误 未找到。服务器无法根据客户端的请求找到资源(网页)。
405 客户端错误 方法不允许。请求行中指定的请求方法不能被用于请求相应的资源。
406 客户端错误 不可接受。根据客户端请求的范围,服务器无法提供响应。
408 客户端错误 请求超时。客户端没有在服务器预备等待的时间内完成一个请求。
415 客户端错误 不支持的媒体类型。请求的格式不受请求页面的支持。

5xx服务器错误状态码):表示服务器在处理请求的过程中发生了错误。

状态码 类别 描述
500 服务器错误 服务器内部错误。服务器遇到了一个未曾预料的情况,导致其无法完成对请求的处理。
501 服务器错误 尚未实施。服务器不支持当前请求所需要的某个功能。
502 服务器错误 错误网关。作为网关或代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
503 服务器错误 服务不可用。由于临时的服务器维护或者过载,服务器当前无法处理请求。
504 服务器错误 网关超时。作为网关或代理工作的服务器没有及时从上游服务器收到请求。
Cookie

早期的万维网应用非常简单,仅仅是用户查看存放在不同服务器上的各种静态的文档。因此 HTTP 被设计为一种无状态的协议。这样可以简化服务器的设计。现在,用户可以通过万维网实现各种复杂的应用,如网上购物、电子商务等。这些应用往往需要万维网服务器能够识别用户

Cookie 用于在服务器上记录用户信息,它提供了一种机制使得万维网服务器能够“记住”用户,而无需用户主动提供用户标识信息。也就是说,Cookie 是一种对无状态的HTTP进行状态化的技术

![[Cookie.png]]

万维网缓存

在万维网中还可以使用缓存机制以提高万维网的效率。

万维网缓存又称为Web缓存(Web Cache),可位于客户机,也可位于中间系统上,位于中间系统上的 Web缓存 又称为代理服务器(Proxy Server)。

Web 缓存把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去因特网访问该资源

代理服务器

  • 若代理服务器中存放有所请求的对象,则代理服务器会向该主机发回包含所请求对象的响应。

![[代理服务器.png]]

  • 若代理服务器中没有所请求的对象,则代理服务器会向因特网上的原始服务器发送请求,原始服务器将包含有所请求对象的响应发回给代理服务器,代理服务器将该响应存入Web缓存,然后给主机发回该响应。
    ![[Web缓存优势.png]]
  • 若没有Web缓存,当代理服务器收到主机的请求时,由于未配置Web缓存,代理服务器直接将该请求转发至因特网上的原始服务器。原始服务器将包含所请求对象的响应返回给代理服务器,代理服务器立即将该响应转发给主机,但不会在本地存储任何副本。后续相同对象的请求仍需重复此过程。
    ![[没有Web缓存.png]]

原始服务器通常会为每个响应的对象设定一个修改时间字段和一个有效日期字段

  • 假设原始服务器中的该文档已被更改,当校园网中的某台主机要请求原始服务器中的该文档时,它首先向校园网中的代理服务器发送请求,若代理服务器中的该文档未过期,则代理服务器将其封装在响应报文中发回给主机。

![[文档未过期.png]]

若代理服务器中的该文档已过期,则代理服务器会向因特网上的原始服务器发送请求,在请求报文中包含有一个首部字段为 lf-modified-since 的首部行,该字段的取值就是该文档的修改日期。原始服务器根据此修改日期的值,就可判断出代理服务器中存储的该文档是否与可自己存储的该文档一致。

  • 如果一致,则给代理服务器发送不包含实体主体的响应。代理服务器重新更新该文档的有效日期,然后将该文档封装在响应报文中发回给主机。

![[有效日期一致.png]]

  • 如果不一致,则给代理服务器发送封装有该文档的响应报文,这样代理服务器就更新了该文档,然后将更新后的该文档封装在响应报文中发回给主机。

![[有效日期不一致.png]]

总结

万维网(WWW)由蒂姆·伯纳斯-李于1989年在CERN提出,通过超文本技术将全球信息资源链接成逻辑网络,用户可交互式访问。其核心由 HTML(定义网页结构)、URL(资源唯一标识符)和 HTTP 协议(支持浏览器与服务器通信)构成,结合浏览器解析与服务器存储实现信息传输。

HTTP/1.1 通过持续连接和流水线请求显著提升效率,代理服务器与Web缓存机制减少延迟和服务器负载,Cookie 技术解决 HTTP 无状态问题以支持用户身份识别。万维网支持静态、动态及活动文档类型,从早期静态页面发展为支撑电商、社交等复杂应用的全球性信息平台,彻底改变了人类获取与共享信息的方式。