- 万维网WWW
★★★6.7 万维网WWW
万维网 WWW(World Wide Web),并非某种特殊的计算机网络,而是一个大规模的、联机式的信息储藏所,是运行在因特网上的一个分布式应用。
万维网利用网页之间的超链接将不同网站的网页链接成一张逻辑上的信息网。
浏览器
浏览器最重要的部分是渲染引擎,即浏览器的内核,负责对网页内容进行解析和显示。
不同的浏览器内核对网页内容的解析也有不同,因此同一网页在不同内核的浏览器里的显示效果可能不同。

万维网应用
★统一资源定位符URL
为了方便地访问在世界范围的文档,万维网使用统一资源定位符 URL 来指明因特网上任何种类 “资源” 的位置。
URL 的一般形式由以下四个部分组成:协议、主机、端口、路径。

万维网文档

HTML
HTML(HyperText Markup Language),超文本标记语言。
它使用多种 “标签” 来描述网页的结构和内容,是一种用于创建网页的标准标记语言。
CSS
CSS(Cascading Style Sheet),层叠样式表。
它从审美的角度来描述网页的样式,用于定义如何显示 HTML 文件。
Javascript
- 该脚本语言用于控制网页的行为。
由 HTML、CSS、Javascript 编写的万维网文档,用浏览器内核负责解析和渲染。
★★★HTTP协议
HTTP(HyperText Transfer Protocol),超文本传输协议,HTTP定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。
如下图所示:
- 用户主机中的浏览器进程(客户进程)首先发起与万维网服务器中的 Nginx 服务器(服务器进程)的 TCP 连接,使用熟知端口号 80;
- 基于这条已经建立好的 TCP 连接,浏览器进程向服务器进程发送 HTTP 请求报文;
- 服务器进程收到后,执行相应操作,然后给浏览器进程发回 HTTP 响应报文。

HTTP/1.0 采用非持续连接方式。

HTTP/1.1 采用持续连接方式。

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


HTTP响应报文



★★★Cookie
当我们访问网站时,浏览器通常会使用 Cookie 在服务器上记录用户的信息。
Cookie 提供了一种机制使得万维网服务器能够 “记住” 用户,而无需用户主动提供用户标识信息。也就是说,Cookie 是一种对无状态的 HTTP 进行状态化的技术。

★Cookie的工作原理
如下图所示,用户主机中的浏览器进程首先与万维网服务器中的服务器进程建立 TCP 连接。
当用户的浏览器进程初次向服务器进程发送 HTTP 请求报文时,服务器进程就会为其产生一个唯一的 Cookie 识别码,并以此为索引,在服务器的后端数据库中创建一个项目,用来记录该用户访问该网站的各种信息;
然后服务器进程就会给浏览器进程发回 HTTP 响应报文,在响应报文中,包含有一个首部字段为
Set-Cookie
的首部行,该字段的取值就是 Cookie 识别码;当浏览器进程收到该响应报文之后,就在一个特定的 Cookie 文件中添加一行,记录该服务器的域名和 Cookie 识别码;
当用户再次使用该浏览器访问这个网站时,每发送一个 HTTP 请求报文,浏览器都会从 Cookie 文件中取出该网站的 Cookie 识别码,并放到 HTTP 请求报文的 Cookie 首部行中,服务器根据 Cookie 识别码就可以识别出该用户,并返回该用户的个性化网页。

★万维网缓存与代理服务器


为了防止因原始服务器中的文档发生改变而导致用户主机接收到代理服务器中过时的文档,原始服务器通常会为每个响应的对象设定一个修改时间字段(Last-Modified)和一个有效日期字段(Expires)。

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

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

若一致,则原始服务器给代理服务器发送不包含实体主体的响应,状态码为 304,短语为
Not Modified
,则代理服务器重新更新该文档的有效日期,然后将该文档封装在响应报文中发回给主机;
若不一致,则原始服务器给代理服务器发送封装有该文档的响应报文,这样,代理服务器就更新了该文档(也更新了修改时间字段(Last-Modified)和有效日期字段(Expires)),然后代理服务器将更新后的该文档封装在响应报文中发回给主机。