100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 《HTTP权威指南》读书记录

《HTTP权威指南》读书记录

时间:2021-11-22 01:45:26

相关推荐

《HTTP权威指南》读书记录

HTTP权威指南 (图灵程序设计丛书), [美]David Gourley Brian Totty Marjorie Sayer Sailu Reddy Aushu Aggarwal

因特网上有数千种不同的数据类型,HTTP 仔细地给每种要通过 Web 传输的对象都打上了名为 MIME 类型(MIME type)的数据格式标签。最初设计 MIME (Multipurpose Internet Mail Extension,多用途因特网邮件扩展)是为了解决在不同的电子邮件系统之间搬移报文时存在的问题。

307-309

MIME 类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型

315-316

MIME 类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。

315-316

每个 Web 服务器资源都有一个名字,这样客户端就可以说明它们感兴趣的资源是什么了。服务器资源名被称为统一资源标识符(Uniform Resource Identifier, URI)。URI 就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。

324-326

给定了 URI,HTTP 就可以解析出对象。URI 有两种形式,分别称为 URL 和 URN。现在我们分

329-329

HTTP 是个应用层协议。HTTP 无需操心网络通信的具体细节;它把联网的细节都交给了通用、可靠的因特网传输协议 TCP/IP。

426-427

代理 位于客户端和服务器之间的 HTTP 中间实体。 缓存 HTTP 的仓库,使常用页面的副本可以保存在离客户端更近的地方。 网关 连接其他应用程序的特殊 Web 服务器。 隧道 对 HTTP 通信报文进行盲转发的特殊代理。 Agent 代理 发起自动 HTTP 请求的半智能 Web 客户端。 1.8.1代理 首先我们来看看 HTTP 代理服务器,这是 Web 安全、应用集成以及性能优化的重要组成模块。

517-524

代理位于客户端和服务器之间,接收所有客户端的 HTTP 请求,并将这些请求转发给服务器(可能会对请求进行修改之后转发)。对用户来说,这些应用程序就是一个代理,代表用户访问服务器。

524-526

代理还可以对请求和响应进行过滤。比如,在企业中对下载的应用程序进行病毒检测,或者对小学生屏蔽一些成人才能看的内容。

529-530

代理缓存(proxy cache)是一种特殊的 HTTP 代理服务器,可以将经过代理传送的常用文档复制保存起来。下一个请求同一文档的客户端就可以享受缓存的私有副本所提供的服务了(参见图 1-12)。

531-533

网关(gateway)是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将 HTTP 流量转换成其他的协议。网关接受请求时就好像自己是资源的源端服务器一样。客户端可能并不知道自己正在与一个网关进行通信。

537-539

URI 是一类更通用的资源标识符,URL 实际上是它的一个子集。URI 是一个通用的概念,由两个主要的子集 URL 和 URN 构成,URL 是通过描述资源的位置来标识资源的,而 URN(本章稍后会介绍)则是通过名字来识别资源的,与它们当前所处位置无关。

619-621

HTTP 报文会像河水一样流动。不管是请求报文还是响应报文,所有报文都会向下游(downstream)流动(参见图 3-2)。所有报文的发送者都在接收者的上游(upstream)。

1007-1009

其中主要版本号(major)和次要版本号(minor)都是整数。

1042-1043

状态码是在每条响应报文的起始行中返回的。会返回一个数字状态和一个可读的状态。数字码便于程序进行差错处理,而原因短语则更便于人们理解。 可以通过三位数字代码对不同状态码进行分类。200 到 299 之间的状态码表示成功。300 到 399 之间的代码表示资源已经被移走了。400 到 499 之间的代码表示客户端的请求出错了。500 到 599 之间的代码表示服务器出错了。

1100-1103

整体范围 已定义范围 分类 100~199 100~101 信息提示 200~299 200~206 成功 300~399 300~305 重定向 400~499 400~415 客户端错误 500~599 500~505 服务器错误

1105-1115

HEAD 方法与 GET 方法的行为很类似,但服务器在响应中只返回首部。不会返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查。使用 HEAD,可以: 在不获取资源的情况下了解资源的情况(比如,判断其类型); 通过查看响应中的状态码,看看某个对象是否存在;

1203-1207

POST 用于向服务器发送数据。PUT 用于向服务器上的资源(例如文件)中存储数据。

1222-1223

TRACE 请求会在目的服务器端发起一个“环回”诊断。行程最后一站的服务器会弹回一条 TRACE 响应,并在响应主体中携带它收到的原始请求报文。这样客户端就可以查看在所有中间 HTTP 应用程序组成的请求 / 响应链上,原始报文是否,以及如何被毁坏或修改过(参见图 3-11)。 图 3-11TRACE 示例 TRACE 方法主要用于诊断;也就是说,用于验证请求是否如愿穿过了请求 / 响应链。它也是一种很好的工具,可以用来查看代理和其他应用程序对用户请求所产生效果。

1227-1232

OPTIONS 方法请求 Web 服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法。(有些服务器可能只支持对一些特殊类型的对象使用特定的操作)。

1238-1240

DELETE 方法所做的事情就是请服务器删除请求 URL 所指定的资源。但是,客户端应用程序无法保证删除操作一定会被执行。因为 HTTP 规范允许服务器在不通知客户端的情况下撤销请求。

1243-1245

HTTP/1.1 逐渐停止了对 keep-alive 连接的支持,用一种名为持久连接(persistent connection)的改进型设计取代了它。持久连接的目的与 keep-alive 连接的目的相同,但工作机制更优一些。

2156-2157

HTTP/1.1 允许在持久连接上可选地使用请求管道。这是相对于 keep-alive 连接的又一性能优化。在响应到达之前,可以将多条请求放入队列。当第一条请求通过网络流向地球另一端的服务器时,第二条和第三条请求也可以开始发送了。在高时延网络条件下,这样做可以降低网络的环回时间,提高性能。

2182-2185

所有 HTTP 客户端、服务器或代理都可以在任意时刻关闭一条 TCP 传输连接。通常会在一条报文结束时关闭连接,1 但出错的时候,也可能在首部行的中间,或其他奇怪的地方关闭连接。 1 除非服务器怀疑出现了客户端或网络故障,否则就不应该在请求的中间关闭连接。

2201-2204

总之,实现正常关闭的应用程序首先应该关闭它们的输出信道,然后等待连接另一端的对等实体关闭它的输出信道。当两端都告诉对方它们不会再发送任何数据(比如关闭输出信道)之后,连接就会被完全关闭,而不会有重置的危险。

2255-2257

单线程的 Web 服务器一次只处理一个请求,直到其完成为止。一个事务处理结束之后,才去处理下一条连接。这种结构易于实现,但在处理过程中,所有其他连接都会被忽略。这样会造成严重的性能问题,只适用于低负荷的服务器,以及 type-o-serve 这样的诊断工具。

2489-2492

多进程和多线程 Web 服务器用多个进程,或更高效的线程同时对请求进行处理。3 可以根据需要创建,或者预先创建一些线程 / 进程。4 有些服务器会为每条连接 分配一个线程 / 进程,但当服务器同时要处理成百、上千,甚至数以万计的连接 时,需要的进程或线程数量可能会消耗太多的内存或系统资源。因此,很多多线 程 Web 服务器都会对线程 / 进程的最大数量进行限制。

2493-2497

复用 I/O 的服务器(参见图 5-7c) 为了支持大量的连接,很多 Web 服务器都采用了复用结构。在复用结构中,要同时监视所有连接上的活动。当连接的状态发生变化时(比如,有数据可用,或出现错误时),就对那条连接进行少量的处理;处理结束之后,将连接返回到开放连接列表中,等待下一次状态变化。只有在有事情可做时才会对连接进行处理;在空闲连接上等待的时候并不会绑定线程和进程。

2501-2505

复用的多线程 Web 服务器(参见图 5-7d) 有些系统会将多线程和复用功能结合在一起,以利用计算机平台上的多个 CPU。多个线程(通常是一个物理处理器)中的每一个都在观察打开的连接(或打开的连接中的一个子集),并对每条连接执行少量的任务。

2506-2508

一旦 Web 服务器收到了请求,就可以根据方法、资源、首部和可选的主体部分来对请求进行处理了。 有些方法(比如 POST)要求请求报文中必须带有实体主体部分的数据。其他一些方法(比如 OPTIONS)允许有请求的主体部分,也允许没有。少数方法(比如 GET)禁止在请求报文中包含实体的主体数据。

2509-2512

6.1Web 的中间实体 Web 上的代理服务器是代表客户端完成事务处理的中间人。如果没有 Web 代理,HTTP 客户端就要直接与 HTTP 服务器进行对话。有了 Web 代理,客户端就可以与代理进行对话,然后由代理代表客户端与服务器进行交流。客户端仍然会完成对事务的处理,但它是通过代理服务器提供的优质服务来实现的。 HTTP 的代理服务器既是 Web 服务器又是 Web 客户端。HTTP 客户端会向代理发送请求报文,代理服务器必须像 Web 服务器一样,正确地处理请求和连接,然后返回响应。同时,代理自身要向服务器发送请求,这样,其行为就必须像正确的 HTTP 客户端一样,要发送请求并接收响应(参见图 6-1)

2661-2667

严格来说,代理连接的是两个或多个使用相同协议的应用程序,而网关连接的则是两个或多个使用不同协议的端点。网关扮演的是“协议转换器”的角色,即使客户端和服务器使用的是不同的协议,客户端也可以通过它完成与服务器之间的事务处理。

2678-2680

图 6-2a 中的中间设备是一个 HTTP 代理,因为代理与客户端和服务器之间使用的都是 HTTP 协议。 图 6-2b 中的中间设备是一个 HTTP/POP 网关, 因为它把 HTTP 的前台与 POP E-mail 的后端连接了起来。网关将 Web 事务转换成适当的 POP 事务,这样用户就可以通过 HTTP 读取 E-mail 了。基于 Web 的 E-mail 程序,比如 Yahoo! 邮件 和 MSN Hotmail 都是 HTTP E-mail 网关。

2682-2685

代理和网关之间的区别很模糊。由于浏览器和服务器实现的是不同版本的 HTTP,代理也经常要做一些协议转换工作。而商业化的代理服务器也会实现网关的功能来支持 SSL 安全协议、SOCKS 防火墙、FTP 访问,以及基于 Web 的应用程序。我们将在第 8 章详细介绍网关。

2687-2690

代理服务器可以实现各种时髦且有用的功能。它们可以改善安全性,提高性能,节省费用。代理服务器可以看到并接触到所有流过的 HTTP 流量,所以代理可以监视流量并对其进行修改,以实现很多有用的增值 Web 服务。这里给出了几种代理使用方法的示例。

2691-2693

儿童过滤器 小学在为教育站点提供无阻碍访问的同时,可以利用过滤器代理来阻止学生访问成人内容。如图 6-3 所示,代理应该允许学生无限制地访问教育性内容,但对不适合儿童的站点要强行禁止访问。1

2694-2696

文档访问控制 可以用代理服务器在大量 Web 服务器和 Web 资源之间实现统一的访问控制策略,创建审核跟踪机制。这在大型企业环境或其他分布式机构中是很有用的。

2698-2700

安全防火墙 网络安全工程师通常会使用代理服务器来提高安全性。

2711-2711

代理服务器的部署 可以根据其目标用途,将代理放在任意位置。图 6-11 给出了部署代理服务器的几种方式。

2759-2760

Web 缓存是可以自动保存常见文档副本的 HTTP 设备。当 Web 请求抵达缓存时,如果本地有“已缓存的”副本,就可以从本地存储设备而不是原始服务器中提取这个文档。使用缓存有下列优点。 缓存减少了冗余的数据传输,节省了你的网络费用。 缓存缓解了网络瓶颈的问题。不需要更多的带宽就能够更快地加载页面。 缓存降低了对原始服务器的要求。服务器可以更快地响应,避免过载的出现。 缓存降低了距离时延,因为从较远的地方加载页面会更慢一些。

3158-3165

HTTP 有一些简单的机制可以在不要求服务器记住有哪些缓存拥有其文档副本的情况下,保持已缓存数据与服务器数据之间充分一致。HTTP 将这些简单的机制称为文档过期(document expiration)和服务器再验证(server revalidation)。

3393-3395

Cache-Control: max-age 首部表示的是从服务器将文档传来之时起,可以认为此文档处于新鲜状态的秒数。还有一个 s-maxage 首部(注意 maxage 的中间没有连字符),其行为与 max-age 类似,但仅适用于共享(公有)缓存:

3551-3554

为了让作者在无需与 Web 服务器的配置文件进行交互的情况下,能够更容易地为所提供的 HTML 文档分配 HTTP 首部信息,HTML 2.0 定义了 <META HTTP-EQUIV> 标签。这个可选的标签位于 HTML 文档的顶部,定义了应该与文档有所关联的 HTTP 首部。这里有一个 <META HTTP-EQUIV> 标签设置的例子,它将 HTML 文档标记为非缓冲的: <HTML> <HEAD> <TITLE>MyDocument</TITLE> <METAHTTP-EQUIV="Cache-control"CONTENT="no-cache"> </HEAD> ...

3645-3650

Web 上所有的资源都可以使用 HTTP 协议,而且其他应用程序和应用程序协议也可以利用 HTTP 来完成它们的 任务。

3836-3837

为了解决这个问题,开发者提出了网关(gateway)的概念,网关可以作为某种翻译器使用,它抽象出了一种能够到达资源的方法。网关是资源和应用程序之间的粘合剂。应用程序可以(通过 HTTP 或其他已定义的接口)请求网关来处理某条请求,网关可以提供一条响应。网关可以向数据库发送查询语句,或者生成动态的内容,就像一个门一样:进去一条请求,出来一个响应。

3846-3849

Web 网关在一侧使用 HTTP 协议,在另一侧使用另一种协议。2 2 在不同 HTTP 版本之间进行转换的 Web 代理就像网关一样,它们会执行复杂的逻辑,以便在各个端点之间进行沟通。但因为它们在两侧使用的都是 HTTP,所以从技术上来讲,它们还是代理。 可以用一个斜杠来分隔客户端和服务器端协议,并以此对网关进行描述: < 客户端协议 >/< 服务器端协议 >

3865-3870

服务器端Web网关 请求流入原始服务器时,服务器端 Web 网关会将客户端 HTTP 请求转换为其他协议(参见图 8-5)。

3887-3888

HTTP/HTTPS:服务器端安全网关 一个组织可以通过网关对所有的输入 Web 请求加密,以提供额外的隐私和安全性保护。客户端可以用普通的 HTTP 浏览 Web 内容,但网关会自动加密用户的对话(参见图 8-6)。

3900-3902

第一个流行的应用程序网关 API 就是通用网关接口(Common Gateway Interface, CGI)。CGI 是一个标准接口集,Web服务器可以用它来装载程序以响应对特定 URL 的 HTTP 请求,并收集程序的输出数据,将其放在 HTTP 响应中回送。

3923-3925

因特网委员会开发了一组允许 Web 应用程序之间相互通信的标准和协议。尽管 Web 服务(Web service)可以用来表示独立的 Web 应用程序(构造模块),这里我们还是宽松地用这个术语来表示这些标准。Web 服务的引入并不新鲜,但这是应用程序共享信息的一种新机制。Web 服务是构建在标准的 Web 技术(比如 HTTP)之上的。

3963-3966

Extensible Markup Language,扩展标记语言

3967-3967

提供了一种创建数据对象的定制信息,并对其进行解释的方法。SOAP(Simple Object Access Protocol,简单对象访问协议)是向 HTTP 报文中添加 XML 信息的标准方式。1

3967-3969

我们要看看 HTTP 的另一种用法——Web 隧道(Web tunnel),这种方式可以通过 HTTP 应用程序访问使用非 HTTP 协议的应用程序。

3975-3976

Web 隧道允许用户通过 HTTP 连接发送非 HTTP 流量,这样就可以在 HTTP 上捎带其他协议数据了。使用 Web 隧道最常见的原因就是要在 HTTP 连接中嵌入非 HTTP 流量,这样,这类流量就可以穿过只允许 Web 流量通过的防火

3976-3978

HTTPS 协议(SSL 上的 HTTP)

4036-4036

对于 SSL 隧道机制来说,无需在代理中实现 SSL。SSL 会话是建立在产生请求的客户端和目的(安全的)Web 服务器之间的,中间的代理服务器只是将加密数据经过隧道传输,并不会在安全事务中扮演其他的角色。

4042-4044

cookie 是当前识别用户,实现持久会话的最好方式。前面各种技术中存在的很多问题对它们都没什么影响,但是通常会将它们与那些技术共用,以实现额外的价值。cookie 最初是由网景公司开发的,但现在所有主要的浏览器都支持它。

5115-5117

cookie 非常重要,而且它们定义了一些新的 HTTP 首部,所以我们要比前面那些技术更详细地介绍它们。cookie 的存在也影响了缓存,大多数缓存和浏览器都不允许对任何 cookie 的内容进行缓存。

5117-5119

可以笼统地将 cookie 分为两类: 会话 cookie 和持久 cookie。会话 cookie 是一种临时 cookie,它记录了用户访问站点时的设置和偏好。用户退出浏览器时,会话 cookie 就被删除了。持久 cookie 的生存时间更长一些;它们存储在硬盘上,浏览器退出,计算机重启时它们仍然存在。通常会用持久 cookie 维护某个用户会周期性访问的站点的配置文件或登录名。

5120-5123

cookie 中可以包含任意信息,但它们通常都只包含一个服务器为了进行跟踪而产生的独特的识别码。

5132-5133

cookie 的基本思想就是让浏览器积累一组服务器特有的信息,每次访问服务器时都将这些信息提供给它。因为浏览器要负责存储 cookie 信息,所以此系统被称为客户端侧状态(client-side state)。这个 cookie 规范的正式名称为 HTTP 状态管理机制(HTTP state management mechanism)。

5140-5143

基本认证便捷灵活,但极不安全。用户名和密码都是以明文形式传送的,1 也没有采取任何措施防止对报文的篡改。安全使用基本认证的唯一方式就是将其与 SSL 配合使用。 1 用户名和密码用 Base-64 编码进行了扰码,但很容易被解码。只能防止无意中的查看,没有任何防止恶意用户攻击的手段。

5563-5566

摘要认证并不是最安全的协议。1 摘要认证并不能满足安全 HTTP 事务的很多需求。对这些需求来说,使用传输层安全(Transport Layer Security,TLS)和安全 HTTP (Secure HTTP,HTTPS)协议更为合适一些。

5574-5576

摘要认证遵循的箴言是“绝不通过网络发送密码”。客户端不会发送密码,而是会发送一个“指纹”或密码的“摘要”,这是密码的不可逆扰码。客户端和服务器都知道这个密码,因此服务器可以验证所提供的摘要是否与密码相匹配。只拿到摘要的话,除了将所有的密码都拿来试试之外,没有其他方法可以找出摘要是来自哪个密码的! 3

5585-5588

摘要是“对信息主体的浓缩”。5 摘要是一种单向函数,主要用于将无限的输入值转换为有限的浓缩输出值。6 常见的摘要函数 MD5,7 会将任意长度的字节序列转换为一个 128 位的摘要。

5604-5606

MD5 表示“报文摘要的第五版”,是摘要算法系列中的一种。安全散列算法(Secure Hash Algorithm, SHA)是另一种常见的摘要函数。

5611-5612

MD5 输出的 128 位的摘要通常会被写成 32 个十六进制的字符,每个字符表示 4 位。

5616-5617

有时也将摘要函数称为加密的校验和、单向散列函数或指纹函数。

5632-5633

摘要认证的核心就是对公共信息、保密信息和有时限的随机值这个组合的单向摘要。

5662-5663

使用 HTTPS 时,所有的 HTTP 请求和响应数据在发送到网络之前,都要进行加密。HTTPS 在 HTTP 下面提供了一个传输级的密码安全层(参见图 14-2)——可以使用 SSL,也可以使用其后继者——传输层安全(Transport Layer Security,TLS)。

5988-5990

14.7.3建立安全传输 在未加密 HTTP 中,客户端会打开一条到 Web 服务器端口 80 的 TCP 连接,发送一条请求报文,接收一条响应报文,关闭连接。图 14-15a 对此序列进行了说明。 由于 SSL 安全层的存在,HTTPS 中这个过程会略微复杂一些。在 HTTPS 中,客户端首先打开一条到 Web 服务器端口 443(安全 HTTP 的默认端口)的连接。一旦建立了 TCP 连接,客户端和服务器就会初始化 SSL 层,对加密参数进行沟通,并交换密钥。握手完成之后,SSL 初始化就完成了,客户端就可以将请求报文发送给安全层了。在将这些报文发送给 TCP 之前,要先对其进行加密。图 14-15b 对此过程 进行了说明

6280-6285

SSL 是个复杂的二进制协议。除非你是密码专家,否则就不应该直接发送原始的 SSL 流量。幸运的是,借助一些商业或开源的库,编写 SSL 客户端和服务器并不十分困难。

6338-6339

内容分发网络(CDN)就是对特定内容进行分发的专门网络。这个网络中的节点可以是 Web 服务器、反向代理或缓存。

8101-8102

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。