《HTTP权威指南笔记》

第一章、HTTP概述
1、Web浏览器、服务器和相关的Web应用程序都是通过HTTP相互通信的,HTTP是现代全球因特网中使用的公共语言。
2、Web服务器回味所有HTTP对象数据附加一个MIME类型,MIME类型时一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间为一条斜杠来分割。(Content-type:image/jpeg)
3、服务器资源名被称为统一资源标识符(URI),有两种形式:1、URL统一资源定位符,由三部分组成:方案(http://),服务器的因特网地址(www.XXXX.com)以及服务器某个资源(/special/test.jpg);2、URN统一资源名(仍处于试验阶段)
4、一条HTTP事务由一条请求命令和一个响应结果组成。
5、Telnet程序可以很好的模拟HTTP客户端,但不能作为服务器使用。
6、代理位于客户端和服务器之间,接收所有客户端的HTTP请求,并将这些请求转发给服务器。
7、Web缓存或代理缓存是一种特殊的HTTP代理服务器,可以将经过代理传送的常用文档复制保存起来。下一个请求同一个文档的客户端就可以享受缓存的私有副本所提供的服务了。
8、网关是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将HTTP流量转换成其他的协议。
9、隧道是建立起来之后,就会在两条连接之间对原始数据进行盲转发的HTTP应用程序。HTTP隧道通常用来在一条或多条HTTP连接上转发非HTTP数据,转发时不会窥探数据。
10、用户Agent代理时代表用户发起HTTP请求的客户端程序。所有发布Web请求的应用程序都是HTTP Agent代理,如:浏览器。


第二章、URL与资源
1、URI是一类更通用的资源标识符,URL实际上是它的一个子集.URI是
一个通用的概念,有两个主要的子集URL和URN构成。
        2、大多数URL方案的URL语法都建立在这个由9部分构成的通用格式上:
<scheme>://<user>:<password>@<host>:<port>/<path>;<param>?<query>#<frag>
        但几乎没有哪个URL包含了所有这些组件,最重要的还是3个部分,方案(scheme),主机(host)和路径(path),至于9部分详细介绍如下:
        方案(scheme):就是使用了什么协议。
        主机(host):主机名或者ip地址
端口(port):标识了服务器正在监听的网络端口,TCP的HTTP默认80
用户名(user)和密码(password):有一些服务器需要输入用户名和密码才能用户访问数据,比如FTP服务器。
路径(path):可以用“/”将HTTP的URL路径划分为一些路径段。
参数(param):为了向应用程序提供它们所需的输入参数,URL有一个参数组件,就是URL中的名值对列表,有“;”将其与URL的其余部分分隔开,如:http://www.prep.ai.mit.com/pub/gnu;type=d/index.html;sale=false
查询字符串(query):很多资源,比如数据库服务,就是通过提问题或进行查询来缩小所请求资源类型范围的。http://www.prep.ai.mit.com/get?item=12
片段(frag):为了引用部分资源或资源的一个片段。(但服务器通常只处理整个对象,所以浏览器从服务器获得了整个资源之后,会根据片段来显示你感兴趣的那部分资源)
第三章、HTTP报文
1、HTTP报文是简单的格式化数据块。每条报文包含一条来自客户端的请求,或者一条来自服务器的响应。它们由三个部分组成:对报文进行描述的起始行、包含属性的首部块、以及可选的、包含数据的主体部分。
2、HTTP报文分为:请求报文和响应报文。
请求报文的格式如下:
<method> <request-URL> <version>
<headers>

<entity-body>
响应报文的格式如下:
<version> <status > <reason-phrase>
<headers>

<entity-body>
注:各部分的简要描述如下:
Method:客户端希望服务器对资源执行的方法,如GET,POST
request-URL:命名了所请求资源的完整URL
version:报文所使用的HTTO版本
status:描述了请求过程中所发生的情况,响应报文的数字状态码
reason-phrase:数字状态码的可读版本。
Headers:首部,可以有0或多个。
entity-body:实体的主体部分包含一个由任意数据组成的数据块。
3、常用的HTTP方法如下(请求报文):
GET:从服务器获取一份文档,不包含主体。
HEAD:只从服务器获取文档的首部,不包含主体
POST:向服务器发送需要处理的数据,包含主体
PUT:将请求的主体部分存储在服务器上,包含主体
TRACE:对可能经过代理服务器传送到服务器上去的报文进行追踪,不包含主体
OPTIONS:询问可以在服务器上执行哪些方法,不包含主体
DELETE:从服务上删除一份文档,不包含主体
4、HEAD方法与GET方法的行为很类似,但服务器在响应中只返回首部。这允许客户端在未获取实际资源情况下,对资源的首部进行检查。可以在以下情况使用:
(1)在不获取资源的情况下了解资源的情况
(2)通过查看响应中的状态码,看看某个对象是否存在
(3)通过查看首部,测试资源是否被修改了
注意:服务器开发者必须确保返回的首部与GET请求所返回的首部完全相同。
5、与GET从服务器读取文档相反,PUT方法会向服务器写入文档。PUT方法的语义就是让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,或者,如果那个URL已经存在的话,就用这个主体来替代它。
6、TRACE方法允许客户端在最终将请求发送给服务器时,看看它变成了什么样子。TRACE请求会在目的服务器端发起一个“环回”判断。行程的最后一站的服务器会弹回一条TRACE响应,并在响应主体中携带它收到的原始请求报文。这样客户端就可以查看在所有中间应用程序组成的请求/响应链上,原始报文是否,以及如何被毁坏或修改过。(TRACE方法主要用于诊断,也就是说用于验证请求是否如愿穿过了请求/响应链。)
7、OPTIONS方法请求Web服务器告知其支持的各种功能,可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法。
8、DELETE方法就是请服务器删除请求URL所指定的资源。
9、状态码:
(1)100~199:信息性状态码
客户端应用程序只有在避免向服务器发送一个服务器无法处理或使用的大实体时,才应该使用100Continue(在Expect首部设置)
服务器也永远不应该向没有发送100Continue期望的客户端发送100Continue状态码。
(2)200~299:成功状态码
200 OK:成功处理
201 Created,用于创建服务器对象的请求(比如:PUT方法)
202 Accepted,请求你已被接受,但服务器还未对其执行任何动作
203 Non-Authoritative Information,请求已处理,但实体首部包含的信息不是来自原始服务器,而是来自资源的副本。
204 No Content:响应报文中包含若干首部和一个状态行,没有主体。
(3)300~399:重定向状态码
300 Multiple Choices:客户端请求的一个实际指向多个资源的URL时会返回这个状态码(如DNS重定向)
301 Moved Permanently:在请求的URL已被移除,响应的Location包含资源现在所处的新URL
304 Not Modified:资源自上次请求至今,仍未被修改
305 Use Proxy:用来说明必须通过一个代理来访问资源
(4)400~499:客户端错误状态码
400 Bad Request:告知客户端它发送了一个错误的请求
401 Unauthorized:需要客户端认证才能获取对资源的访问权
403 ForBidden:说明请求被服务器拒绝了。
404 Not Found:服务器没有找到所请求的URL
405 Method Not Allowed:发起的请求带有服务器不支持的方法。
406 Not Acceptable:服务器没有与客户端可接受的URL相匹配的资源
(5)500~599:服务器错误状态码
500 Internal Server Error:服务器遇到一个妨碍它为请求提供服务的错误
501 Not Implemented:客户端发起的请求超出了服务器的能力范围。
503 Service Unavailable:用来说明服务器现在无法为请求提供服务,但将来可以
504 Gateway Timeout:超时,只是这里的响应来自一个网管或者代理。

第四章、连接管理
1、HTTP就是“HTTP over TCP over IP”这个协议栈中的最顶层了,其安全版本HTTPS就是在HTTP和TCP之间插入了一个(称为TLS或SSL)密码加密层。
2、TCP就是通过端口号来保持所有连接持续不断地运行。
3、TCP数据传输的性能还取决于TCP连接的使用期。TCP连接会随着时间进行自我协调,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度,这种协调称为TCP慢启动,用于防止因特网的突然过载和拥塞。
4、最常见的TCP相关时延,其中包括
(1)TCP连接建立握手
(2)TCP慢启动拥塞控制
(3)数据聚集的Nagle算法
(4)用于捎带确认的TCP延迟确认算法
(5)TIME_WAIT时延和端口耗尽
5、在事务处理结束之后仍然保持在打开状态的TCP连接被称为持久连接。重用已对目标服务器打开的空闲持久连接,就可以避开缓慢的连接建立阶段。将持久连接和并行连接配合使用可能是最高效的方式。打开少量的并行连接,其中的每一个都是持久连接。
6、为了处理哑代理(无法识别keep-alive首部)导致的问题,可以发送非标准的Proxy-Connection扩展首部,而不是官方支持的Connectio首部。如果代理时盲中继,它会将无意义的Proxy-Connection首部转发给Web服务器,服务器会忽略该首部,就不建立持久连接。如果代理时识别的了这个首部的,就会用一个Connection首部取代无意义的Proxy-Connection首部,然后将其转发给服务器,以达到效果。
7、HTTP1.0只有响应中有Connection:Keep-Alive首部,才会将连接处于打开状态,而HTTP1.1则假定所有连接都是持久的,只有Connection:close首部,才会在事务处理结束之后将连接关闭。
8、一个用户客户端对任何服务器或代理最多只能维护两条持久连接,以防服务器过载。
9、关闭连接的正常做法:实现正常关闭的应用程序首先应该关闭他们的输出信道,然后等待连接另一端的对等实体关闭它的输出信道。当两端都告诉对方它们不会再发送任何数据之后,连接就会被完全关闭,而不会有重置的危险。
第五章、Web服务器
1、实际的Web服务器会做些什么
(1)接收客户端连接:如果客户端已经打开了一条持久连接,则直接用这条连接来发送请求,不然就打开一条新连接。新连接需要先对客户端主机名进行反向DNS,以用于详细的访问控制和日志记录。而服务器可以通过ident协议找到发起HTTP连接的用户名。
(2)接收请求报文:Web服务器会从网络连接中读取数据,并将请求报文中的内容解析出来。
(3)处理请求:根据方法、资源、首部和可选的主体部分来对请求进行处理。
(4)对资源的映射及访问:通过docroot,目录列表,动态内容资源的映射,服务器端包含项以及访问控制
(5)构建响应:构建响应实体和确定MIME类型,以及对需要重定向的资源进行重定向
(6)发送响应
(7)记录日志
第六章、代理
1、代理服务器可以是某个客户端专用的,也可以是很多个客户端共享的。单个客户端专用的称为私有代理,众多客户共享的称为公共代理
2、代理连接的是两个或多个使用相同协议的应用程序,而网关连接的则是两个或多个使用不同协议的端点。
3、为什么使用代理?因为代理服务器可以实现各种时髦而有用的功能,他们可以改善安全性,提高性能,节约费用。如下:
(1)儿童过滤器
(2)文档访问控制
(3)安全防火墙
(4)Web缓存
(5)反向代理
(6)内容路由器
(7)转码器
4、Via首部字段列出了与报文途径的每个中间节点(代理或网关)有关的信息。响应的Via首部基本上总是和请求的Via首部相反。
5、可以用Max-Forwrads首部字段来限制TRACE方法的转发跳数,主要Max-Forwrads=0,则无论是否已经到达服务器都应该讲Trace报文回送给客户端。
6、Allow响应实体首部字段列出了请求URI标识的资源所支持的方法列表,如果请求URI为*的话,列出的就是整个服务器所支持的方法列表。

第七章、缓存
1、使用缓存的优点如下:
(1)缓存减少了冗余的数据传输,节省了你的网络费用
(2)缓存缓解了网络瓶颈的问题。不需要更多的带宽就能够更快地加载页面
(3)缓存降低了对原始服务器的要求,服务器可以更快地响应,避免过载的出现
(4)缓存降低了距离时延,因为从较远的地方加载页面会更慢一些。
2、专用缓存被称为私有缓存,是个人的缓存,比如个人电脑的磁盘和内存中。共享的缓存称为公有缓存,是特殊的共享代理服务器,也是缓存代理服务器,也被称为代理缓存。
3、缓存的处理步骤如下;
(1)接收:缓存从网络中读取抵达的请求报文
(2)解析:缓存对报文进行解析,提取出URL和各种首部
(3)查询:缓存查看是否有本地副本可用,如果没有,就获取一份副本(并将其保存在本地)
(4)新鲜度检测:缓存查看已缓存副本是否足够新鲜,如果不是,就询问服务器是否有任何更新
(5)创建响应:缓存会用新的首部和已缓存的主体来构建一条响应报文
(6)发送:缓存通过网络将响应发回给客户端
(7)日志:缓存可选的创建一个日志文件条目来描述这个事务
4、检查文档的新鲜度
(1)通过Cache-Control首部(用max-age指定生存时间,以秒为单位)和Expires首部(指定过期的日期,需要客户端与服务器时钟同步)
(2)缓存并不一定要为每条请求验证文档的有效性,只有在文档过期时才需要与服务器进行再验证。而且HTTP的条件方法可以高效实现再验证,HTTP允许缓存向原始服务器发送一个“条件GET”,请求服务器只有在文档与缓存中现有的副本不同时,才会送对象主体。
(3)最常见缓存再验证首部是If-Modified-since。If-Modified-since首部可以与Last-Modified服务器响应首部匹配工作。原始服务器会将最后的修改日期附加到所提供的文档上去。当缓存要对已缓存文档进行再验证时,就会包含一个If-Modified-Since首部,其中携带有最后修改已缓存副本的日期。而如果在此期间内容被修改了,最后的修改日期就会有所不同,原始服务器就会回送新的文档。否则,服务器会注意到缓存的最后修改日期与服务器文档当前的最后修改日期相符,会返回一个304状态码响应。
(4)If-None-Match实体标签再验证(ETag),如果HTTP1.1缓存或服务器收到的请求既带有If-Modified-Since又带有实体标签条件首部,则只有两个条件都满足时,才会返回304响应。
5、<Meta http-equiv>标签并不是控制文档缓存特性的好方法,通过配置正确的服务器发出HTTP首部,才是传送文档缓存控制请求的唯一可靠方法。因为大多数软件都会忽略HTTP-EQUIV标签。

第八章、集成点:网关,隧道及中继
略过(由于笔者觉得对于前端来说,学习用处不大,因此跳过)
第九章、Web机器人
略过(内容有些看不懂,暂时跳过)
第十章、HTTP-NG
1、HTTP/1.1现在提供了可以追踪文档版本的标记和指纹,提供了一些方法来支持文档的上传以及与可编程网关之间的交互,还提供了对多语言内容、安全及认证功能、降低流量的缓存功能、减小时延的管道功能、降低启动时间提高带宽使用效率的持久连接,以及用来进行部分更新的访问范围功能的支持。但HTTP的发展至少存在4个方面的问题:
(1)复杂性,相当复杂,特性之间相互依存。
(2)可扩展性,很难实现递增式扩展
(3)性能,有些部分效率不高
(4)传输依赖性
2、HTTP-NG的主题: 模块化及功能增强,分为三层。
(1)报文传输:只关心报文的有效传输,不考虑报文的含义和目的。采用WebMUX协议,是个高性能的报文协议,可以对报文进行分段,并在一条复用的TCP连接上交错地传输报文。
(2)远程调用:HTTP-NG结构的中间层提供了对远程方法调用的支持。采用二进制连接协议。
(3)Web应用:是执行语义和应用程序特定逻辑的地方,描述了一个用于提供应用程序特定服务的系统。
3、虽然现在还没有什么主导的力量在驱动HTTP-NG的应用,但随着HTTP应用的不断增多和无线因特网技术发展,HTTP-NG中提出的一些技术可能会在HTTP的青少年时期逐渐呈现出其重要性。
第十一章、客户端识别与cookie机制
1、几种用户识别机制
(1)承载用户身份信息的HTTP首部
(2)客户端IP地址跟踪,通过用户的IP地址对其进行识别
(3)用户登录,用认证方式来识别用户(用WWW-Authenticate首部和Authorization首部)
(4)胖URL,一种在URL中嵌入识别信息的技术
2、cookie分为会话cookie和持久cookie。如果设置了Discard参数,或者没有设置Expires或Max-Age参数来说明扩展的过期时间,那么这个cookie就是一个会话cookie。
3、cookie中包含了一个由名字=值(name=value)这样的信息构成的任意列表,并通过Set-Cookie或Set-Cookie2 HTTP响应首部将其贴到用户身上。
4、产生cookie 的服务器可以向Set-Cookie响应首部添加一个Domain属性来控制那些站点可以看到那个cookie。比如:
Set-Cookie:user=”mary”;domain=”aritravelbragain.com”
第十二章、基本认证机制
1、HTTP定义了两个官方的认证协议:基本认证和摘要认证。
2、基本认证步骤:
(1)请求
(2)服务器对用户进行质询,会返回一条401响应,并在WWW-Authenticate首部说明如何以及在哪里进行认证。
(3)当客户端授权服务器继续处理时,会重新发送请求,但会在Authorization首部附上加密的密码和其他一些认证参数
(4)授权请求成功完成时,服务器会返回一个正常的状态码(如200 OK)
3、基本认证的安全缺陷
(1)基本认证会通过网络发送用户名和密码,虽然经过Base-64编码,但其实很容易被解码,相当于明文传输。
(2)即使用更难解码的编码进行加密,也很容易被第三方用户捕获到用户名和密码,同样可以一次又一次的重放给原始服务器以获得访问权。
(3)解码出密码后可能用在其他网站上,比如这个用户的在线银行网站。
(4)没有提供任何针对代理和作为中间人的中间节点的防护措施,他们没有修改认证首部,但却修改了报文的其余部分,严重改变了事务的本质。(有点没懂)
(5)假冒服务器很容易骗过基本认证,可以请求用户输入密码,将其存储以备未来使用,然后捏造一条错误信息发给用户。
4、将基本认证与加密数据传输(比如SSL)配合使用,向恶意用户隐藏用户名和密码,会使基本认证变得更加安全。
第十三章、摘要认证
1、摘要认证是另一种HTTP认证协议,它试图修复基本认证协议的严重缺陷。具体来说,摘要认证进行了如下改进:
(1)永远不会以明文方式在网络上发送密码
(2)可以防止恶意用户捕获并重放认证的握手过程
(3)可以有选择地防止对报文内容的篡改
(4)防范其他几种常见的攻击方式
注:摘要认证并不是最安全的认证,而且现在摘要认证也还没有被广泛应用。
2、摘要是一种单向函数,主要用于将无限的输入值转换为有限的浓缩输出值。有时也将摘要函数称为加密的校验和、单向散列函数或指纹函数。
3、为了防止摘要被截获,并且一遍遍地重放给服务器。服务器可以用随机数防止重放攻击。服务器可以向客户端发送一个称为随机数的特殊令牌,这个数会经常发生变化(可能是每毫秒,或者是每次认证都变化)。客户端在计算摘要之前要先将这个随机数令牌附加到密码上去。而随机数实在WWW-Authenticate质询中从服务器传送给客户端的。
4、摘要认证的核心就是对公共信息、保密信息和有时限的随机值这个组合的单向摘要。
5、摘要认证在保留了很多安全特性的同时,还提供了几种预授权方式,这里列出了三种可选的方式,通过这些方式,客户端无需等待新的WWW-Authenticate质询,就可以获得正确的随机数。
(1)服务器预先在Authentication-Info成功首部中发送下一个随机数
(2)服务器允许一小段时间内使用同一个随机数
(3)客户端和服务器使用同步的、可预测的随机数生成算法
6、RFC 2617扩展了摘要认证机制,允许客户端对服务器进行认证。这是通过提供客户端随机值来实现的,服务器会根据它对共享保密信息的正确了解生成正确的响应摘要。特别是,只要提供了qop指令,就要求执行对称认证,而没有qop指令时则不要求执行对称认证。
7、重放攻击:就是有人将从某个事物中窃取的认证证书用于另一个事务。避免重放攻击的方法就是为每个事务都使用一个唯一的随机数。
8、词典攻击:就是典型的密码猜测型攻击。
9、恶意代理攻击和中间人攻击:随着重定向和拦截代理的出现,用户甚至意识不到他的请求穿过了某个代理,如果这些代理中时恶意的或者容易被入侵,就会使客户端置于中间人攻击之下。防止这些攻击唯一简便的方式就是使用SSL。
10、选择明文攻击:通过恶意或被入侵的代理,为客户端的响应计算提供随机数,使用已知密钥来计算响应可以简化响应的密码分析过程。
(1)预先计算的词典攻击
(2)批量暴力型攻击
防止这些攻击的方法就是配置客户端使用可选的conoce指令,这样响应就是基于客户端的判断产生的,而不是用服务器提供的随机数产生的。
第十四章、安全HTTP
1、使用HTTPS时,所有的HTTP请求和响应数据在发送到网络之前,都要进行加密。HTTPS在HTTP下面提供了一个传送级的密码安全层——可以使用SSL,也可以使用TLS。大部分困难的编码及解码工作都是在SSL库中完成得,所以Web客户端和服务器在使用安全HTTP时无需过多地修改其协议处理逻辑。在大多数情况下,只需要用SSL的输入/输出调用取代TCP的调用,再增加其他几个调用来配置和管理安全信息就行了。
2、数字加密
(1)密码:对文本进行编码,使偷窥者无法识别的算法
(2)密钥:改变密码行为的数字化参数
(3)对称密钥加密系统:编/解码使用相同密钥的算法
(4)不对称密钥加密系统:编/解码使用不同密钥的算法
(5)公开密钥加密系统:一种能够使数百万计算机便捷的发送机密报文的系统。
(6)数字签名:用来验证报文未被伪造或篡改的校验和
(7)数字证书:由一个可信的组织验证和签发的识别信息。
3、基本所有的加密算法都会使用密钥
4、在对称密钥加密技术中,发送端和接收端要共享相同的密钥才能进行通信,流行的对称密钥加密算法有:DES、Triple-DES、RC2和RC4
5、用暴力去尝试所有的密钥值称为枚举攻击。
6、通常大家都认为长度与Triple-DES密钥相当的128位DES密钥实际上是任何人以任何代价都无法通过暴力攻击破解的。
7、对称密钥加密技术的缺点之一就是发送者和接收者在互相对话之前,一定要有一个共享的保密密钥。这样一来,如果有N个节点,每个节点都要和其他N-1个节点进行安全对话的话,总共大概有N*N个保密密钥,这将是一个管理噩梦。
8、公开密钥加密技术没有为每对主机使用单独的加密/解密密钥,而是使用了两个非对称密钥:一个用来对主机报文编码,另一个用来对主机报文解码。编码密钥是众所周知的(这也是公开密钥加密这个名字的由来),但只有主机才知道私有的解密密钥,因此只有主机才能对报文进行解码。
9、RSA算法就是一个流行的公开密钥加密系统。
10、公开密钥加密算法的计算可能会很慢,实际上它混合使用了对称和非对称策略。比如:比较常见的做法是在两节点间通过便捷的公开密钥加密技术建立起安全通信,然后再用那条安全的通道产生并发送临时的随机对称密钥,通过更快地对称加密技术对其余的数据进行加密。
11、用加密系统对报文进行签名,以说明是谁编写的报文,同时证明报文未被篡改过,这种技术被称为数字签名。数字签名通常使用非对称公开密钥技术产生的。因为只有所有者才知道其私有密钥,所以可以将作者的私有密钥当做一种“指纹”使用。
12、通过HTTPS建立了一个安全Web事务之后,现代的浏览器都会自动获取所连接服务器的数字证书,如果服务器没有证书,安全连接就会失败。
13、HTTPS的细节介绍
(1)HTTPS就是在安全的传输层上发送的HTTP。HTTPS在将HTTP报文发送给TCP之前,先将其发送给了安全层,对其进行加密。
(2)请求一个客户端对某Web资源执行某事务时,它会去检查URL的方案,如果URL方案为http,客户端就会打开一条道服务器端口80的连接;如果方案为https,就会打开一条到服务器端口443的连接,然后与服务器握手,以二进制格式与服务器交换一些SSL安全参数,附上加密的HTTP命令。
(3)建立安全传输。在HTTPS中,客户端首先打开一条到Web服务器端口443的连接。一旦建立TCP连接,客户端和服务器就会初始化SSL层,对加密参数进行沟通,并交换密钥。握手完成之后,SSL初始化就完成了,客户端就可以将请求报文发送给安全层了。在将这些报文发送给TCP之前,要先对其进行加密。(SSL握手需要完成交换协议版本号,选择一个两端都了解的密码,对两端的身份进行认证以及生成临时的会话密钥,以便加密信道)
(4)使用服务器证书,并检查站点证书的有效性。
14、通过代理以隧道形式传输安全流量,如果客户端开始用服务器的公开密钥对发往服务器的数据进行加密,代理就再也不能读取HTTP首部了。一种常用的解决方法使用的技术就是HTTPS SSL隧道协议。使用HTTPS SSL隧道协议,客户端首先要告知代理,它想要连接的安全主机和端口。这是在开始加密之前,以明文形式告知的,所以代理可以理解这条信息。
第十五章、实体与编码(只取部分笔者觉得有用的部分)
1、使用Content-Length首部是为了能够检测出服务器崩溃而导致的报文截尾,并对共享持久连接的多个报文进行正确分段。如果主体进行了内容编码,Content-Length首部说明的就是编码后的主体的字节长度,而不是未编码的原始主体的长度。
2、Content-Type首部说明的是原始实体主体的媒体类型。
3、为了避免服务器使用客户端不支持的编码方式,客户端就把自己支持的内容编码方式列表放在请求的Accept-Encoding首部里发出去。如果HTTP请求中没有包含Accept-Encoding首部,服务器就可以假设客户端能够接受任何编码方式。客户端可以给每种编码附带Q值参数来说明编码的优先级。1.0表明最希望使用的编码,0表明不想接受。

更多资料免费分享加群  120342833    验证回答  ZZ


第十六章、国际化(只取部分笔者觉得有用的部分)
1、字符集是把字符转换为二进制码的编码,而charset参数告知客户端如何把内容中的二进制码转换为字符。
2、Web服务器通过在Content-Type首部中使用charset参数把MIME字符集标记发送给客户端:
Content-Type:text/html;charset=iso-2022-jp
        对于HTML内容来说,可以在描述charset的<META HTTP-EQUIV=”Ccontent-Type”>标记中找到字符集。如:
<META HTTP-EQUIV=”Ccontent-Type” CONTENT=“text/html;charset=iso-2022-jp”>
        如果客户端无法推断出字符编码,就假定使用的是iso-8859-1
3、HTTP客户端可以使用Accept-Charset请求首部来明确高坠服务器它支持哪些字符系统。
第十七章、内容协商与转码
略过(由于笔者觉得对于前端来说,学习用处不大,因此跳过)
第十八章、Web主机托管
1、主机托管分为专用托管和虚拟主机托管。
2、许多Web托管者通过让一些顾客共享一台计算机来提供便宜的Web主机托管服务,这称为共享主机托管或虚拟主机托管
3、有以下4种技术可以实现虚拟主机
(1)通过URL路径进行虚拟主机托管(导致前缀很多余)
(2)通过端口号进行主机托管(同上,端口号多余)
(3)通过IP地址进行主机托管(存在消耗IP地址资源问题,但仍然得到了广泛的运用)
(4)通过Host首部进行主机托管(有一些客户端和服务器不支持)
4、Host首部描述了所请求的资源所在的因特网主机和端口号,和原始的URL中得到的一样。
5、为了让网站更可靠,有以下方法:
(1)使用镜像的服务器集群,镜像服务器可以在不同的地点包含同样内容的副本,可以使用HTTP重定向或DNS重定向将客户端的请求导向特定的服务器。
(2)内容分发网络
(3)CND中的反向代理缓存。反向代理和镜像服务器之间的区别在于反向代理通常是需求驱动的。它们不会保存原始服务器的全部内容副本,它们只保存客户端请求的那部分内容。
(4)CDN的代理缓存。
第十九章、发布系统
略过(内容有些看不懂,暂时跳过)
第二十章、重定向和负载均衡
1、为什么HTTP应用程序要重定向?
        (1)可靠的执行HTTP事务
        (2)最小化时延
        (3)节约网络带宽
        大多数重定向部署都包含了某些形式的负载均衡。也就是说,它们可以将输入报文的负载分摊到一组服务器中去。而且重定向的目标是尽快地将HTTP报文发送到可用的Web服务器上去。
        2、通用的重定向方法
        (1)HTTP重定向,有些Web站点会将HTTP重定向作为一种简单的负载均衡形式来使用。HTTP重定向的优点之一就是重定向服务器知道客户端的IP地址。
        (2)DNS重定向,适用于一个主机名对应多个IP地址,需要DNS解析程序来返回可变,可用的IP。解析方式有:DNS轮转,多个地址及轮转地址的循环,用于平衡负载的DNS轮转。
        (3)任播寻址,几个地理上分散的Web服务器拥有完全相同的IP地址,而且会通过骨干路由器的“最短路径”路由功能将客户端的请求发送给离它最近的服务器。(该技术仍然是实验性技术)
        3、代理的重定向方法,有3种方法:显式的浏览器配置,动态自动配置以及透明拦截。
        4、因特网缓存协议(ICP)允许缓存再其兄弟缓存中查找命中内容。如果某个缓存中没有HTTP报文所请求的内容,它可以表明内容是否在附近的兄弟缓存中,如果在就从那里获取内容,以避免查询原始服务器而带来的更多开销。可以把ICP当做一个缓存集群协议。HTTP请求报文的最终目的地可以通过一系列的ICP查询确定,从这个角度来说,它就是一个重定向协议。
第二十一章、日志记录与使用情况跟踪
略过(由于笔者觉得对于前端来说,学习用处不大,因此跳过)

推荐阅读更多精彩内容