logo  

跟我一起读RFC

跟我一起读RFC
作者: 陈安廉

摘要:软件开发进阶系列


1.3 术语


2020-12-01 13:52:29



本说明用到了若干术语,以表示 HTTP 通信中各参与者和对象扮演的不同角色。

连接(connection) 

为通信而在两个程序间建立的传输层虚拟电路。 


消息(message) 

HTTP 通信中的基本单元。它由一个结构化的八比特字节序列组成,与第 4 章定义的句法相匹 配,并通过连接得到传送。 

 

请求(request) 

一种 HTTP 请求消息,参看第 5 章的定义。 

 

响应(response) 

一种 HTTP 响应消息,参看第 6 章的定义。


资源(resource) 

一种网络数据对象或服务,可以用第 3.2 节定义的 URI 指定。资源可以以多种表现方式(例如多种语言,数据格式,大小和分辨率)或者根据其它方面而而不同的表现形式。


实体(entity) 

实体是请求或响应的有效承载信息。一个实体包含元信息和内容,元信息以实体头域(entity-header field)形式表示,内容以消息主体(entity-body)形式表示。在第 7 章详述。


表现形式 (representation) 

一个响应包含的实体是由内容协商(content negotiation)决定的。如第 12 章所述。有可能存在一个特定的响应状态码对应多个表现形式。


内容协商(content negotiation) 

当服务一个请求时选择资源的一种适当的表示形式的机制(mechanism),如第 12 节所述。任 何响应里实体的表现形式都是可协商的(包括错误响应)。


变量(variant) 

在某个时刻,一个资源对应的表现形式(representation)可以有一个或多个(译注:一个URI 请求一个资源,但返回的是此资源对应的表现形式,这根据内容协商决定)。每个表现形式 ( representation ) 被 称 作 一 个 变 量 。 ‘ 变 量 ’ 这 个 术 语 的 使 用 并 不 意 味 着 资 源

(resource)是由内容协商决定的.。 


客户端(client) 

为发送请求建立连接的程序.。


用户代理(user agent) 

初始化请求的客户端程序。常见的如浏览器,编辑器,蜘蛛(可网络穿越的机器人),或其他的终端用户工具. 


服务器(Server) 

服务器是这样一个应用程序,它同意请求端的连接,并发送响应(response)。任何给定的程序都有可能既做客户端又做服务器;我们使用这些术语是为了说明特定连接中应用程序所担当的角色,而不是指通常意义上应用程序的能力。同样,任何服务器都可以基于每个请求的性质

扮演源服务器,代理,网关,或者隧道等角色之一。 


源服务器(Origin server) 

存在资源或者资源在其上被创建的服务器(server)被成为源服务器(origin server)。 

 

代理( Proxy) 

代理是一个中间程序,它既可以担当客户端的角色也可以担当服务器的角色。代理代表客户端向服务器发送请求。客户端的请求经过代理,会在代理内部得到服务或者经过一定的转换转至其他服务器。一个代理必须能同时实现本规范中对客户端和服务器所作的要求。透明代理

(transparent proxy)需要代理认证和代理识别,而不修改请求或响应。非透明代理(non￾transparent proxy)需修改请求或响应,以便为用户代理(user agent)提供附加服务,附加服务包括组注释服务,媒体类型转换,协议简化,或者匿名过滤等。除非透明行为或非透明行

为经被显式地声明,否则,HTTP 代理既是透明代理也是非透明代理。 


网关(gateway) 

网关其实是一个服务器,扮演着代表其它服务器为客户端提供服务的中间者。与代理(proxy)不同,网关接收请求,仿佛它就是请求资源的源服务器。请求的客户端可能觉察不到它正在同网关通信。


隧道(tunnel)

隧道也是一个中间程序,它一个在两个连接之间充当盲目中继(blind relay)的中间程序。一旦隧道处于活动状态,它不能被认为是这次 HTTP 通信的参与者,虽然 HTTP 请求可能已经把它 初始化了。当两端的中继连接都关闭的时候,隧道不再存在。


缓存(cache) 

缓存是程序响应消息的本地存储。缓存是一个子系统,控制消息的存储、获取和删除。缓存里存放可缓存的响应(cacheable response)为的是减少对将来同样请求的响应时间和网络带宽消 耗。任一客户端或服务器都可能含有缓存,但缓存不能存在于一个充当隧道(tunnel)的服务器

里。


可缓存的(cacheable) 

我们说响应(response)是可缓存的,如果这个响应可以被缓存(cache)保存其副本,为的是能响应后续请求。确定 HTTP 响应的缓存能力(cacheability)在 13 节中有介绍。即使一个资源(resourse)是可缓存的,也可能存在缓存是否能利用此缓存副本为某个特定请求的约束。


第一手的(first-hand) 

如果一个响应直接从源服务器或经过若干代理(proxy),并且没有不必要的延时,最后到达 客户端,那么这个响应就是第一手的(first-hand)。

如果响应通过源服务器(origin server)验证是有效性(validity)的,那么这个响应也同样是第一手的。


显式过期时间(explicit expiration time) 

是源服务器认为实体(entity)在没有被进一步验证(validation)的情况下,缓存(cache)不应该利用其去响应后续请求的时间(译注:也就是说,当响应的显式过期时间达到后,缓存必须要对其缓存的副本进行重验证,否则就不能去利用此副本去响应后续请求)。


启发式过期时间(heuristic expiration time) 

当没有显式过期时间(explicit expiration time)可利用时,由缓存指定过期时间. 


年龄(age) 

一个响应的年龄是从被源服务器发送或被源服务器成功验证到现在的时间。


保鲜寿命(freshness lifetime) 

一个响应产生到过期之间的时间。


保鲜(Fresh) 

如果一个响应的年龄还没有超过保鲜寿命(freshness lifetime),那么它就是保鲜的.。


陈旧(Stale) 

一个响应的年龄已经超过了它的保鲜寿命(freshness lifetime),那么就是陈旧的. 


语义透明(semantically transparent) 

缓存(cache)可能会以一种语意透明(semantically transparent)的方式工作。这时,对于一个特定的响应,使用缓存既不会对请求客户端产生影响也不会对源服务器产生影响,缓存的使用只是为了提高性能。当缓存(cache)具有语意透明时,客户端从缓存接收的响应跟直接从

源服务器接收的响应完全一致(除了使用 hop-by-hop 头域)。


验证器(Validator) 

验证器其实是协议元素(例如:实体标签(entity tag)或最后修改时间(last-modified time) 等),这些协议元素被用于识别缓存里保存的副本(即缓存项)是否等价于源服务器的实体的副本。 


上游/下游(upstream/downstream) 

上游和下游描述了消息的流动:所有消息都是从上游流到下游。 


内向/外向(inbound/outbound) 

内向和外向指的是消息的请求和响应路径:“内向”即“移向源服务器”,“外向”即“移向用户代理(user agent)”。