<<HTTP权威指南>>读书笔记

第一部分:Web的基础

第1章:HTTP概述

主要内容

1、什么是HTTP

2、HTTP的基本组件

HTTP

HTTP:HTTP(Hypertext Transfer Protocal,超文本传输协议)是在万维网上进行通信时所使用的协议方案,最著名的应用是用于Web浏览器和Web服务器之间的双工通信.

HTTP的基本组件

Web服务器和Web客户端:Web服务器和Web客户端组成了万维网的基本组件.Web的内容通常存储在Web服务器上,Web客户端通常都是Web浏览器(IE,google浏览器等).

举一个最简单的例子,当我们在浏览器输入http://www.google.com/index.html时,浏览器会向服务器www.google.com发送一条HTTP的GET请求,服务器会根据请求中的内容寻找存储在服务器的对象(在这个例子中是/index.html),如果成功的话就将对象,对象类型,对象长度以及其他信息放在HTTP响应中发生给客户端.

资源:Web资源是Web内容的源头,通常储存在Web服务器.可以是Web服务器上的静态文件,也可以是根据需求所生成的动态内容.

MIME:MIME是HTTP对象的一种数据格式标签(文本标记),用来对所有的HTTP对象进行标注,便于服务器和客户端对HTTP对象进行相应的解释处理.(格式:一个主要的对象类型和一个特定的子类型,中间以斜杠作为分割符)

例子:HTML格式的文本文档由text/html表示,JPEG格式图片由image/jpeg表示,GIF动图由image/gif表示.

URI:URI(Uniform Resource Identifier,统一资源标识符),用于在世界范围里唯一标识并定位资源.有URL和URN形式.

事务:一条HTTP事务由一条请求命令和一个响应结果组成.

报文:由一行一行的纯文本组成,通常由起始行,首部字段,主体三部分组成.

连接:HTTP是一个应用层协议,HTTP报文通常都是由传输层协议TCP/IP进行可靠的传输.

代理:位于客户端和服务器之间的HTTP中间实体.

缓存:HTTP的仓库,保持常用页面的副本.

网关:连接其他应用程序的特殊Web服务器.

隧道:对HTTP通信报文进行盲转发的特殊代理.

Agent代理:发起自动HTTP请求的半智能Web客户端.

第2章:URL与资源

主要内容

1、什么是URL

2、URL的作用

URL定义和作用

URL:URL(Uniform Resource Location,统一资源定位符),用于定位因特网上所有资源的位置.

URL的格式

通用格式:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
方案(scheme) 访问服务器使用何种协议
用户(user) 某些方案访问资源需要用户名
密码(password) 用户名可能需要对应密码,用于验证身份
主机(host) 宿主服务器的主机名或者IP地址
端口(port) 宿主服务器正在监听的端口(HTTP默认80)
路径(path) 服务器资源的本地名
参数(params) 某些方案需要指定输入参数,格式为:名/值
查询(query) 某些方案用于传递参数激活应用程序,如数据库查询所需的索引
片段(frag) 一小段资源名字,在客户端内部使用(通常服务器传完整的页面信息,浏览器可以选择片段展示给用户浏览)
例子:
http://zoeyzhu:123456@www.google.com:80/index.html;graphics=true?item=12731&color=blue
http表示使用http协议
zoeyzhu表示用户名
123456表示相对应的密码
www.google.com表示服务器主机名
80表示对应监听的端口号
/index.html表示路径名
参数graphics的值为true
查询值的item=12731,color=blue.

URL缺点

使用资源的实际地址定位资源,如果资源路径改变了,URL就失效了。

解决方案

提出URN(Uniform resource name,统一资源名),引入中间资源定位符服务器对资源的实际URL进行跟踪和登记,客户端只需要知道资源的名字即可在中间资源定位符服务器查询其实际的URL,从而顺利访问.(方案尚未推广)

第3章:HTTP报文

主要内容

1、什么是HTTP报文?

2、HTTP报文的结构

HTTP报文定义和组成

HTTP报文:包含三个部分,对报文进行描述的起始行,包含属性的首部行,以及可选的、包含数据的主体部分.

请求报文:
<method> <request-URL> <version>   //起始行
<headers>  //首部行<entity-body>  //主体
响应报文:
<version>  <status> <reason-phrase>
<headers><entity-body>

起始行:请求起始行包括方法,请求URL以及对应的HTTP版本号

GET 从服务器获取一份文档
HEAD 只从服务器获取文档的首部
POST 向服务器发送需要处理的数据
PUT 将请求的主体部分存储在服务器上
TRACE 对可能经过代理服务器传送到服务器上去的报文进行追踪
OPTIONS 决定可以从服务器上执行哪些方法
DELETE 从服务器上删除一份文档

响应起始行包括HTTP版本号,状态码,原因短语

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

首部:描述一些附加信息,通常是名/值对

常用首部:

Date:Sun,15Mar 2020 16:18:00 GMT

Content-length:10000

Content-type:image/gif

Accept:image/gif, image/jpeg, text/html

主体:一般是HTTP传输的内容,例如图片,视频,HTML文档等.

第4章:连接管理

主要内容

1、HTTP是怎么连接的?

2、HTTP连接的性能分析

HTTP连接概述

HTTP是位于TCP上层的协议,其内容主要是由TCP/IP负责传输.

每次建立HTTP连接时,浏览器会从URL中解释出主机名,通过DNS查询到对应的IP地址,然后开启TCP三次握手连接,当TCP连接建立后,客户端和服务器就可以进行HTTP请求以及响应了.

时延原因

1.DNS解释

2.TCP连接时延

3.报文发送和处理时延

HTTP是依赖TCP发送的,由于TCP的自身特性,比如三次握手,慢启动,Nagle算法,Time_Wait累积等,会对HTTP性能造成较大影响.

解决方法

1.并行连接,通过打开多条TCP连接处理各自的HTTTP事务.

2.持久连接,在HTTP事务结束后保证TCP连接持续打开,在后续HTTP事务中通过避免TCP握手慢启动环节提高性能.

3.管道化连接,通过管道发送HTTP事务请求,无需等待前面的事务响应.

带来的问题

1.并行连接会极大地耗尽有限的带宽,由于竞争的存在,可能会导致性能比串行连接更低.

2.持久连接会引发盲代理等问题,通过插入Proxy-connection可以解决部分问题,但当连接存在多个代理(盲代理)时,问题依旧无法解决.因而限制了持久连接只能作用于一跳传输距离.

3.持久连接需要报文有正确的自定义长度,不然无法判断报文的结尾,并且能够从异步关闭中恢复.

4.管道化连接需要保持持久连接,保证响应按顺序回送,否则客服端无法将响应和请求对应起来,保证发送的请求是幂等请求(POST是非幂等请求,GET,HEAD,PUT,TRACE,OPTIONS,DELETE可以认为是幂等请求).

一个事务,不管是执行一次还是多次,得到的结果相同,这个事务就是幂等的.

第二部分:HTTP结构

第5章:Web服务器

主要内容

1、什么是Web服务器

2、服务器的作用

Web服务器实现了HTTP和相关的TCP连接处理.负责管理Web服务器提供的资源,以及对Web服务器的配置,控制及扩展方面的管理.

处理请求步骤

1.建立连接,接受一个客户端连接.

2.接收请求,从网络中读取一条HTTP请求报文.

3.处理请求,对请求进行解释,并采取行动.

4.访问资源,访问报文中指定的资源.

5.构建响应,创建带有正确首部的HTTP响应报文.

6.发送响应,将响应发送会客户端.

7.记录事务处理过程,生成日志文件.

要点

单线程Web服务器:服务器一次只能处理一个请求,其他请求会被阻塞.

多进程及多线程Web服务器:服务器对每一个连接创建一条线程进行处理,当大量并发连接上来时,服务器性能会极速下降.

复用I/O的服务器:服务器同时对多个连接进行管理,当某一个连接有需要处理的事务时,服务器对该连接进行处理,完毕后将该连接继续放入开放连接列表.

复用的多线程Web服务器:服务器使用多线程各自分别观察打开连接的子集,较好地改善了并发问题.

虚拟托管,即是一个真实Web的服务器上提供多个Web站点,每个站点在服务器上都有自己的文档根目录.

第6章:代理

主要内容

1、代理的定义

2、代理的作用和问题

代理的定义

Web代理服务器是位于客户端和服务器之间的中间实体.既能像Web服务器一样正确地处理客户端的请求和连接,返回响应,也要像正确的HTTP客户端一样像服务器发送请求并接受响应.

代理与网关的区别

代理:代理连接的是两个或多个使用相同协议的应用程序.

网关:网关连接的是两个或多个使用不同协议的端点.

代理的作用

代理可以看到并接触到所有流过的HTTP流量,因而可以实现监视流量、改善安全性、提高性能、节省费用等服务。

例子:儿童过滤器、文档访问控制、安全防火墙、Web缓存、反向代理、内容路由器、转码器、匿名服务注释:反向代理是指代理可以假扮服务器接受发送给Web服务器的真实请求,并且它们可以发起与其他服务器的通信,以便按需定位所请求的内容。因而可以用反向代理来提高访问慢速Web服务器上公告内容的性能。内容路由器可以根据因特网流量状况以及内容类型将请求导向特定的Web服务器,例如用户付费要求更高的性能,内容服务器可以将请求发送给附近的复制缓存。转码器是指可以将HTTP响应转码为合适的格式,例如从英语转换为中文等。匿名服务是指代理可以删除HTTP报文的身份特性(客户端IP地址、From首部、Reference首部、cookie、URI的会话ID等)。

代理的部署位置

出口代理:部署在本地网络的出口点,以便控制本地网络与大型因特网之间的流量。

访问(入口)代理:放在ISP访问点上,用以处理来自客户的聚合请求,ISP使用缓存代理来存储常用文档的副本提高下载速度。

反向代理:部署在网络边缘,在Web服务器之前。可以代替服务器处理某些请求,提高服务器的安全性和性能。

网络交换代理:放在网络之间的因特网对等交换点上,通过缓存来减缓节点的拥塞。

代理如何获取流量

修改客户端:客户端可以手动或自动为浏览器配置为使用代理服务器。

修改网络:网络基础设施可以在客户端不知道的情况下将其流量拦截导入代理,依赖与监视HTTP流量的交换设备和路由设备。

修改DNS的命名空间:可以手动编辑DNS名称列表或者通过动态DNS服务器根据需求确定适当的代理或服务器。

修改Web服务器:Web服务器可以为HTTP请求发送重定向命令,将请求重定向到代理上。

棘手问题

部分URL会让代理迷失,代理需要知道完整的URL才能建立连接。(与虚拟主机不同,虚拟主机要求使用Host首部承载主机和端口信息)PS.其实都可以。

浏览器会提供URL自动扩展服务,但当配置代理后,浏览器一般就不提供该服务,因而代理需要提供对应的服务,拦截代理等还需提供容错服务,因而服务器可能会出现停用等情况。

调试问题

Via首部和Trace方法可以方便我们追逐报文的路径。

认证问题

代理可以作为访问控制设备使用,当客服端需要访问受限制内容时,代理可以尝试对用户进行质询。

第7章:缓存

主要内容

1、什么是缓存

2、缓存的作用

缓存的定义

Web缓存是可以自动保存常见文档副本的HTTP设备。

优点

1、缓存减少了冗余的数据传输。

2、缓存缓解了网络瓶颈问题。

3、缓存降低了对原始服务器的要求,避免服务器过载。

4、缓存降低了距离时延,近点缓存比远点服务器的传输时延低。

拓扑结构

缓存为了提高性能和命中率,有多种拓扑结构,例如层次化缓存、网状缓存等。

缓存处理步骤

1、接收——接收从网络中抵达的请求报文。

2、解释——对报文进行解释,提取出URL和各种首部。

3、查询——查询是否有本地副本可用。

4、新鲜度检测——查看本地副本是否新鲜,如果不是,向服务器询问是否有更新。

5、创建响应——使用新的首部和已缓存主题构建响应。

6、发送并记录日志——向响应发送给客户端并选择是否记录该事物日志。

缓存过期

可以通过HTTP服务器在HTTP响应报文中提供过期日期或者使用期来提供新鲜度。如果缓存查看本地副本过期或者过了最大使用期,就必须向服务器发送再验证请求,查看服务器相对应的资源是否被改动。

缓存日志

缓存日志可以记录命中次数和缓存使用次数,定时向服务器汇报,避免引起某些内容提供商的恶意。

第8章:集成点:网关、隧道及中继

主要内容

1、网关、隧道、中继的定义和作用

网关

网关是一种充当转换重任的计算机系统或设备。在使用不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。

举个例子,HTTP/FTP服务器端FTP网关,可以将FTP URL的HTTP请求转换为FTP协议,然后与FTP服务器进行连接发布命令,并将FTP服务器的回应和正确的HTTP首部组合进行HTTP回送响应。
HTTP/CGI服务器端应用程序网关,可以将HTTP客户端连接到服务器端的应用程序上。注释:CGI(Common Gateway Interface,通用网关接口)是一个标准接口集,Web服务器可以用它来装载程序以响应对特定URL的HTTP请求,并收集程序的输出数据,将其放在HTTP响应中回送。

隧道

Web隧道允许用户通过HTTP连接发送非HTTP流量,可以在HTTP上捎带其他协议的数据,从而使这些协议的流量可以穿过只允许Web流量通过的防火墙了。

例子:客户端可以向隧道网关发送CONNECT请求,请求打开一条到某主机的标准SSL端口443的TCP连接,当建立了TCP连接后,客户端和服务器就可以发送SSL流量了,其流量是通过HTTP连接来发送的。(SSL隧道)

由于隧道网关是对内容进行盲转发的,因而它无法验证目前使用的协议是否就是它原本一开始想经过隧道传输的协议,所以需要对隧道安全性和认证加以考虑,例如在客户端需要打开隧道时,验证其身份信息,并且只对特定的知名端口,HTTPS的443端口打开隧道。

中继

HTTP中继是没有完全遵循HTTP规范的简单HTTP代理,负责处理建立连接部分,对字节进行盲转发。

某些盲中继会因为无法处理CONNECTION首部,会有潜在的挂起keep-alive连接的可能。

第9章:Web机器人(爬虫)

Web爬虫是一种机器人,会递归地对各种信息性Web站点进行遍历,获取第一个Web页面,然后获取那个页面指向的所有Web页面,重复地进行这个步骤。

根集

爬虫开始访问的URL初始集合被称为根集。通常一个好的根集会包括一些大的流行Web站点,一个新创建页面的列表和一个不经常被链接的无名页面列表。

环路

类似与有环的链表一样,几个页面的URL构成一个环,导致爬虫不断地在这几个页面间循环爬行。

避免陷入循环和重复页面(爬虫的首要任务)

1、合理的数据结构:搜索树或者散列表,记录已访问的URL。

2、规范化的URL:URL别名,例如http://www.baidu.com/index.html和http://www.baidu.com:80/index.html其实是指向同一页面,因而爬虫应该尽量规范所获得的URL,尽量避免重复访问。

3、广度优先的爬行。

4、节流,限制一段时间内可以从一个Web站点获取的页面数量。

5、限制URL的大小。

6、URL黑名单。

7、模式检测,拒绝爬行带有多于两或三个重复组件的URL,例如“/subdir/subdir/subdir”等。

8、内容指纹,对爬取的页面的字节计算校验和,例如计算报文摘要函数MD5等来检测重复。

9、人工干预。

爬虫的要领

1、身份信息,爬虫应该带有User-Agent、From、Accept、Referer等识别请求首部信息,为Web站点管理提供爬虫的身份信息。

2、支持Host首部,避免出现虚拟主机的问题。

3、条件请求,和缓存新鲜度检测类似,当页面内容更新了才继续爬取存储。

4、至少会处理常见的状态码,例如200 OK、404 NOT FOUND。

拒绝爬虫协议

Web站点管理员可以在站点中配置robots.txt文件,说明对爬虫的排斥规则。如果站点没有robots.txt文件,即默认允许爬虫访问。

爬虫最出色的作用

为搜索引擎提供信息,搜索引擎爬虫爬取的信息可以为搜索引擎创建巨大的索引数据库。

第10章:HTTP-NG(乱BB的HTTP未来发展方向)

主要内容

1、HTTP缺陷

2、未来发展方向

现存的HTTP缺陷

1、复杂性,连接管理、报文处理和功能逻辑等混合作用导致HTTP较为复杂。

2、扩展性,HTTP应用程序没有自主的扩展技术。

3、性能不高。

4、传输依赖性,依赖TCP/IP。

模块化和功能增强

将HTTP协议模块化为三层

第一层:报文传输层,专注报文的不透明高效传输。

第二层:远程调用层,定义请求/响应功能,提供一种标准的方法来调用服务器上所有的操作。

第三层:Web应用层,定义HTTP1.1的所有方法和首部参数,提供大部分的内容管理逻辑。

第三部分:识别、认证与安全

第11章:客户端识别与cookie机制

主要内容

1、怎么识别客户端

识别方法

1、承载用户身份信息的HTTP首部。

2、客户端IP地址追踪,通过用户的IP地址对其进行识别。

3、用户登录,用认证的方式识别用户。

4、胖URL,在URL中嵌入识别信息的技术。

5、cookie,一种功能强大且高效的持久身份识别技术。

HTTP首部

首部名称 首部类型 描述
From 请求 用户的E-mail地址
User-Agent 请求 用户的浏览器软件
Reference 请求 用户是从这个页面上依照链接跳转过来的
Authorization 请求 用户名和密码
Client-IP 扩展请求 客户端的IP地址
X-Forward-For 扩展请求 客户端的IP地址
Cookie 扩展请求 服务器产生的ID标签
From首部包含了用户的E-mail地址,通常是机器人发送的。User-Agent首部包含了用户浏览器信息Reference首部提供了用户来源页面的URL

以上三种首部都不能实现可靠的识别。

客户端IP地址

HTTP首部一般不提供客户端的IP地址,但是可以通过找到承载HTTP请求的TCP连接来找到另一端的IP地址。

缺点:

1、客户端IP地址识别的是所用机器,当用户更换IP地址或者多个用户使用同一计算机时,就无法区分。

2、用户通过NAT(网络地址转换)防火墙浏览网络内容,隐藏了实际客户端的IP地址。

3、HTTP代理和网关也会打开新的TCP连接,此时IP地址就不是客户端的了。

用户登录

通过Authorization要求用户进行用户名和密码的认证登录来询问用户。

缺点:

1、易被窃听密码。

2、不同站点需要记住不同用户名和密码。

胖URL

通过给用户生成包含用户状态信息的URL来追逐用户身份。

缺点:

1、URL太长太丑。

2、无法共享URL,因为URL里面有你的信息。

3、破坏缓存,可供公共访问的URL不需要缓存了。

4、服务器负荷增大,服务器需要重写HTML,解释胖URL等繁琐事。

5、逃逸口,用户无意跳转到其他站点时,会丢失胖URL信息。

6、会话期间非持久,用户退出页面后信息全部丢失。

cookie(强大的认证方式)

cookie:类似与贴标签一样,cookie就像服务器给用户贴的标签,当用户访问一个Web站点时,这个Web站点就能读取那个服务器贴在用户身上的所有贴纸。(常配合其他认证方法一起使用)

例子:当用户第一次访问Web站点时,服务器可以通过在响应中设置Set-cookie首部对客户端进行贴标签,用户下一次访问同一Web站点时,浏览器会自动搜索cookie缓存,在请求中设置cookie首部,这样服务器就能识别该用户。

会话cookie:临时cookie,退出浏览器就被删除。

持久cookie:存储在硬盘上,浏览器退出时,仍然存在。

优点:

1、服务器可以通过在响应中设置Set-cookie首部来设置cookie的域范围、路径范围、过期时间等,方便效率。

2、可以通过cookie来跟踪用户会话。

缺点:

1、大量的cookie会引发传输性能下降严重。

2、侵犯隐私,缓存不能缓存包含Set-cookie首部的响应。

第12章:基本认证机制

主要内容

1、HTTP基本认证定义

2、HTTP基本认证的缺点

HTTP基本认证定义

HTTP原生提供了一个认证框架,称为质询/响应框架,并提供了相应的质询以及授权首部。

例子:当客户端向服务器发送请求时,服务器可以对客服端进行质询,回送带有响应码401的“认证质询”响应,客户端需要提供认证信息(用户名和密码等),服务器验证成功后就可以回送所请求的报文。

缺点

1、基本认证通过网络发送用户名和密码,用户名和密码几乎是以明文的方式传送的。

2、即使密码使用了加密手段,监听者也可以通过获取报文进行破译,或者通过获取报文的用户名和密码然后重放给服务器获取访问权。

3、恶意服务器很容易冒充受基本认证保护的合法主机,通过质询手段获取用户名和密码保存,然后捏造错误信息返回给客户端。

第13章:摘要认证

主要内容

1、摘要认证定义

2、摘要认证作用

摘要认证定义

摘要认真遵循了一个原则“绝不通过网络发送网络”,因而摘要认证是通过发送密码的“摘要”,这是一个密码的不可逆扰码来进行认证。

防止重放攻击

摘要认证和密码一样,如果被捕获了依旧可以重放给服务器获得授权,因而可以在每次需要摘要认证时,服务器发送一个随机数,客户端计算密码摘要时需要将随机数添加到密码后面。

防止报文篡改

可以通过把报文内容也添加到摘要计算中去来防止报文被篡改。

防止恶意代理(服务器)

恶意代理或者服务器可以为客户端的摘要提供随机数,然后根据响应计算密码,可以通过客户端随机数对服务器进行认证,并设置强密码。

第14章:安全HTTP(HTTPS,SSL)

主要内容

1、HTTPS是什么?

2、HTTPS怎么保证传输对象(服务器和客户端)可信?

3、HTTPS怎么保证传输内容的完整性?

4、HTTPS怎么保证传输内容的保密性?

5、HTTPS怎么保证加密算法的高效性、普适性、扩展性、可行性?

主要概念

HTTPS是在应用层协议(HTTP)和传输层TCP之间加了一层传输级的密码安全层,所有的HTTP报文在发送给TCP之前,都会先发送给SSL层进行加密,从而保证了安全的HTTP。

CA

CA(certificate authority)证书授权中心。类似于国家工商管理局,给企业(服务器)颁发营业执照。

特点:

1、自身是受信任的,无需别人认证,受国际认可的。

2、给他受信任的申请对象颁发证书。

服务器证书

SSL事务总是要求服务器证书来提高安全性。

可以通过检查服务器证书的有效时间,签发机构,公开密钥,站点身份等来验证证书的有效性。

对称加密算法

加密解密使用的是同一密钥,加密解密速度较快。

常见的对称加密算法:

DES、3DES、Blowfish、IDEA、RC4、RC5、RC6 和 AES

非对称加密算法

非对称加密算法有两把密钥,一把公钥,一把密钥,公钥加密的信息只有私钥能解密,私钥加密的信息只有公钥能解密。

常见的非对称加密算法:

RSA、ECC、Diffie-Hellman、El Gamal、DSA(数字签名)

Hash算法

可以通过hash算法对目标信息生成一段特定长度的唯一hash值,常用于信息完整性校验,密码存储。

常见摘要算法:

MD2、MD4、MD5、HAVAL、SHA

HTTP默认端口:80

HTTPS默认端口:443

SSL握手

1、交换协议版本号。

2、选择一个两端都了解的密码。

3、对两端身份进行认证。

4、生成临时会话密钥,加密信道。

SSL握手详细

1、客户端向服务器发送ClientHello请求,也即是加密通信请求。

客户端向服务器提供以下信息(明码传输)

(1)客户端支持的TLS协议版本

(2)客户端生成的一个随机数,稍后用于生成"会话密钥"。

(3)客户端支持的对称加密算法和非对称加密算法

(4)客户端支持的压缩算法、Hash算法。

2、服务器回应请求

服务器回应客户端请求,称为ServerHello(明码传输)

(1)确认使用的TLS协议版本

(2)一个服务器生成的随机数,稍后用于生成"会话密钥"。

(3)确认使用的对称加密方法、非对称加密方法、压缩算法、Hash算法

(4)服务器证书

(5)要求验证客户端证书(可选)

3、客户端回应

客户端接收到服务器证书后,验证证书的合法性,然后取出证书的公钥,向服务器发送三项信息

(1)一个随机数,称为pre-master-secret,用服务器的公钥进行加密。

(2)编码改变通知,表示随后信息用临时会话密钥进行加密。

(3)客户端握手结束,并将前面发送的所有内容hash后发送服务器验证。

4、服务器的回应

服务器收到客户端的pre-master-secret,用私钥解密,并验证客户端hash内容,并回送内容

(1)编码改变通知,表示随后信息用临时会话密钥进行加密。

(2)服务器握手结束通知,将前面内容hash发给客户端。

思考

https怎么防篡改的问题?

首先…一个服务器如果想要生成自己的证书时,它需要自己生成一对私钥和公钥,然后把公钥和对应的服务器相关信息写成一个申请文件csr,提交给CA(CA是证书授权中心,受国际认可,被它信任的人可以被所有计算机信任)审核,CA通过线上线下的信息认证确定服务器的真实身份信息安全后,就会选择信任这个服务器,即是把这个服务器的csr文件再添加一些ca的信息(这个是明码的)生成一个服务器证书文本,然后用摘要算法类似(MD5)这种对证书文本进行计算摘要,然后使用CA的私钥进行加密生成CA的证书签名签在服务器证书上,这样当客户端收到服务器证书时,他就会对证书进行同样的摘要运算,并使用CA的公钥对服务器证书的CA签名进行解密,将计算的摘要和解密的摘要进行对比,从而确认服务器证书是否被篡改进行认证服务器了。如果黑客对服务器的证书进行篡改,并且就算他根据篡改后的内容使用他自己的私钥加密成公钥,对服务器的证书签名也进行更改,也是无济于事的。因而客户端只会用CA的公钥对证书签名进行解密,这样计算出来的摘要肯定是不相等的,除非黑客可以拿到ca的私钥或者黑掉了客户端的机子让他使用黑客的公钥对证书签名解密,否则都不能进行任何篡改。而ca的公钥每个计算机都有,而且是写在每个计算机的主板里面的,保证了绝对的正确性以及安全性。

第四部分:实体、编码和国际化(比较水的部分,格式的问题)

第15章:实体和编码

主要内容

1、HTTP怎么保证货物被正确识别

2、HTTP怎么保证货物被正确解包

3、HTTP怎么保证货物是最新的

4、HTTP怎么保证货物是符合用户需要的

5、HTTP怎么保证货物被快速传输

6、HTTP怎么保证货物是完整的、未被篡改的

首部

Content-Type 实体中所承载对象的类型
Content-Length 主体的长度
Content-Language 人类语言
Content-Encoding 对象数据所做的任意变换(压缩)
Content-Location 备用位置
Content-Range 如果是部分实体,说明是哪个部分
Content-MD5 内容的校验和
Last-Modified 最后改动时间
Expires 失效时间
Allow 该资源允许的方法,GET等
ETag 特定实例的唯一验证码
Cache-Control 指出应该如何缓存文档

内容编码

对报文主体内容进行编码,其他部分不变。

传输编码

对整个报文进行编码,报文结构全部改变。(用于未知报文长度的情况下,传输编码可以定义某个结束符作为结束)

分块编码

分块编码也是一种传输编码,对数据进行分块传输,说明每块的大小即可。

当使用分块编码时,它必须是最后一个作用在报文主体上,且只能作用一次,便于确定报文的传输长度。

差异编码

如果网页改动不大,且客户端有一个过期的网页副本,可以使用差异编码只传输差异的部分减少发生数据量。

缺点:服务器必须保持随时间变化的页面各种副本以便计算差异编码,极大消耗磁盘空间。

第16章:国际化(字符编码)

主要内容

1、全世界语言文字太多了,如何让不同国家的人都能用他们自己的语言阅读HTTP报文以及用他们自己的语言创建Web站点呢?

2、如何让客户端和服务器进行协商,说明HTTP主体的编码格式,方便浏览器解码呢?

字符编码是指把各种字符编码为合适的二进制,便于传输显示。

UTF-8

字符代码的二进制位 字节1 字节2 字节3 字节4 字节5 字节6
0-7 0ccccccc - - - - -
8-11 110ccccc 10cccccc - - - -
12-16 1110cccc 10cccccc 10cccccc - - -
17-21 11110ccc 10cccccc 10cccccc 10cccccc - -
22-26 111110cc 10cccccc 10cccccc 10cccccc 10cccccc -
27-31 1111110c 10cccccc 10cccccc 10cccccc 10cccccc 10cccccc
与ASCII兼容,例如5073(13位二进制值1001111010001)编码为3个字节:11100001 10001111 10010001

总的来说,可以在报文的Content-Type首部使用charset参数把MIME字符集标记发送给客户端,或者在文档内容中推断,客户端也可以通过Accept-Charset首部说明可以接受的字符编码。(页面的显示语言类似)

第17章:内容协商与转码

主要内容

1、一个URL通常代表若干不同资源(英文版和中文版),如何让客户端和服务器进行内容协商,使客户端能获得符合自己喜好的资源呢?

2、访问服务器的设备可以是电脑,手机,平板等甚至嵌入式设备,如何保证让服务器和中间节点能根据客户端的设备显示能力,传输相应的HTTP数据呢?

客户端驱动 客户端发起请求,服务器发送可选择列表。 最易实现,客户端自行选择喜好内容。 增加时延,为了获取正确内容,至少发送两次请求。需要多个URL。
服务器驱动 服务器检查客户端请求的首部并提供。 比客户端驱动快,允许服务器近似匹配。 服务器有时候需要进行猜测。
透明 中间代理代表客户端进行协商 比客户端驱动快 还没规范

客户端可以通过Accept首部添加自己的用户偏好信息来与服务器进行内容协商。

服务器可以通过在响应中添加Vary首部,告知中间节点需要使用哪些请求首部进行内容协商。

第18章:Web主机托管

主要内容

1、不同网站如何被“虚拟托管”在同一服务器上,会有什么影响?

2、如何保证网站更可靠。

3、如何使网站加载更快。

虚拟主机托管

一台服务器托管了多个不同的Web站点。

例如:www.baidu.com和www.4399.com可以托管在同一个服务器上,每个Web站点都有自己的根目录。

影响

HTTP1.0请求报文中只发送URL的路径部分,会导致共享服务器无法判断到底要访问哪一个Web站点。

例如:HTTP1.0请求当要访问www.baidu.com/index.html时,只在GET报文提到部分路径/index.html,没有主机名,那么服务器无法确定它到底要www.baidu.com/index.html还是www.4399.com/index.html。

解决方法

1、通过URL路径进行虚拟主机托管,在URL路径添加专门路径部分,以便判断。

例如:www.baidu.com/baidu/index.html和www.4399.com/4399/index.html来判断,是一个糟糕的解决方案,导致www.baidu.com无法使用。

2、通过不同端口号进行虚拟主机托管

例如:www.baidu.com通过80端口,www.4399.com是83端口,也是一个糟糕的方案,需要在URL中指定不同端口,降低了用户的体验度。

3、通过IP地址进行虚拟主机托管

例如:通过把IP地址209.172.34.3分配给www.baidu.com,把IP地址209.172.34.4分配给www.4399.com,然后把两个IP地址都跟同一个服务器绑定即可。
缺点:
1、计算机系统能绑定的虚拟IP地址有限制。
2、IP地址是稀缺资源,托管者不一定能获取足够多的IP地址。
3、当复制服务器进行增加容量时,随着负载均衡体系的不同,每个复制的服务器都需要不同的虚拟IP地址,更加消耗了IP地址资源。

4、通过Host首部进行虚拟主机托管

例如:把主机名(和端口号)放在所有请求的Host扩展首部中传送。

使网站更可靠

1、镜像的服务器集群,托管在服务器上的每个网站的IP地址就设置为交换机的IP地址。

2、内容分发网络,复制原始服务器可以用反向代理缓存来代替。

第19章:发布系统

这部分主要讲了,我也不知道的术语。

第20章:重定向与负载均衡

主要内容

1、如何进行重定向?

2、如何进行负载均衡?

为什么要进行重定向

1、可靠地执行HTTP事务,如果一个资源位置出问题了,可以重定向到另一个位置。

2、最小化时延,可以重定向到近的服务器。

3、节约网络带宽。

HTTP重定向

Web服务器可以将短的重定向报文发送回给客户端,让客户端重新向别的地方请求。

优点:

重定向服务器知道客户端的IP地址,可以做出合理的选择。

缺点:

1、重定向服务器需要大量处理判断重定向到哪台服务器。

2、增加用户时延。

3、重定向服务器故障,则站点瘫痪。

DNS重定向

通过DNS解释程序进行IP地址轮转(简单)或者查看服务器负载,返回最轻的服务器IP地址。

例子:DNS服务器在客户端每次查找域名对应的IP地址时,可以轮转一次,使下一次查找的IP地址不同。

缺点:

DNS查找结果很容易被记住,因而可能客户端在很长的一段时间都是访问同一个IP地址的服务器。

基于DNS重定向的增强算法:

1、负载均衡算法

2、邻接路由算法

3、故障屏蔽算法

任播寻址

多台服务器拥有同一IP地址,然后将自己假扮为路由器,这样当骨干路由器收到客户端请求时,会根据路由器协议的“最短路径”路由功能发送给最近的假扮的服务器。

缺点:

服务器需要使用路由器语言,并需要处理地址冲突。

IP MAC转发

每个数组分组都有一个第四层地址:源IP地址、目的IP地址以及TCP端口号组成,还有一个第二层数据链路层MAC地址。

支持MAC转发的第四层交换机可以将HTTP请求发送给几个代理缓存,支持负载均衡。

但MAC地址转发是点对点的,因此服务器或者代理只能位于交换机一跳远的地方。

IP地址转发

在IP地址转发中,交换机或其他第四层设备会检测输入分组中的TCP/IP地址,并通过修改目的IP地址(不是目的MAC地址),对分组进行相应的转发。

NAT:网络地址转换

完全NAT:将分组的源IP地址改成交换机的IP地址,响应分组发送给交换机。服务器无法知道客户端的IP地址。

半NAT:源IP地址还是客户端的IP地址,但对客户端和服务器之间的整个网络需要有某种程度的控制。

网元控制协议

NECP(Network Element Control Protocal,网元控制协议)允许网元(NE,路由器和交换机等负责转发IP分组的设备)与服务器元素(SE,Web服务器和代理缓存等提供应用层请求的设备)进行交互。让SE提供了一种发送负载均衡信息给NE的方式。

代理重定向

通过显式的浏览器配置、动态自动配置以及透明拦截等功能让客户端连接到代理。代理可能还需要重定向到其他代理,因而需要了解协议:ICP、CARP和HTCP。

缓存重定向

ICP:因特网缓存协议,允许缓存在其兄弟缓存中查找内容,HTTP请求报文的最终目的地可以通过一系列的ICP查询确定。

CARP:缓存阵列路由协议,使用多个代理服务器将负载分散到一组服务器上。用CARP连接起来的服务器可以当作一个大服务器,每个组件服务器包含缓存文档中的一部分。优点:每次只需单次查询即可。缺点:当某个代理服务器不可用了,散列表需要重新计算。

HTCP:超文本缓存协议,ICP只允许发送URL来查询,HTCP允许兄弟缓存之间通过URL和所有请求及响应首部来查询,并且允许兄弟缓存之间相互添加或删除所选中文档,修改对方的缓存策略。

第21章:日志记录与使用情况追踪

主要内容

1、为什么需要记录日志?

2、日志需要记录什么内容?

为什么需要记录日志

记录日志可以追踪使用情况、维护安全性、用于计费、错误检测、统计数据。

需要记录什么内容

1、请求主机名或者IP地址

2、HTTP方法

3、客户端和服务器的HTTP版本

4、所请求资源的URL

5、响应的HTTP状态码

6、请求和响应报文的尺寸

7、事务开始时的时间戳

8、Referer首部和User-Agent首部的值

HTTP权威指南读书笔记相关推荐

  1. mysql数据库权威指南_MySQL_MySQL权威指南读书笔记(三),第二章:MYSQL数据库里面的数 - phpStudy...

    MySQL权威指南读书笔记(三) 第二章:MYSQL数据库里面的数据 用想用好MYSQL,就必须透彻理解MYSQL是如何看待和处理数据的.本章主要讨论了两个问题:一是SQL所能处理的数据值的类型:二是 ...

  2. MongoDB权威指南读书笔记——CRUD

    插入并保存文档 插入是向MongoDB中添加数据的基本方法.可以使用Insert方法向目标集合插入一个文档:db.foo.insert({"bar" : "baz&quo ...

  3. HTML5权威指南----读书笔记

    <!DOCTYPE html> <html> <head><meta name = 'keywords' content="HTML5权威指南--- ...

  4. 计算机网络和http权威指南 读书笔记

    计算机网络笔记 网络层 网络层向上提供无连接的,尽最大努力交付的数据报服务 网络层不提供数据质量承诺 物理层使用的中间设备叫转发器repeater 数据链路层叫网桥bridge 网络层叫路由器rout ...

  5. MapReduce总结 + 相关Hadoop权威指南读书笔记(未完......欢迎补充,互相学习)

    文章目录 MapReduce概述 MapReduce优缺点 MapReduce核心思想 MapReduce进程 MapReduce编程规范 WordCount 案例实操 本地测试 集群测试 Hadoo ...

  6. android开发读书笔记,android开发权威指南读书笔记

    第17章 Fragment 1.在res目录下增加 layout-sw600dp 目录,用于存放7英寸及以上尺寸屏幕的布局文件.10英寸以上平板用 sw720dp.如果是更小的屏幕,如 480*800 ...

  7. java性能权威指南中文_Java性能权威指南读书笔记--之一

    JIT(即时编译) 解释型代码:程序可移植,相同的代码在任何有适当解释器的机器上,都能运行,但是速度慢. 编译型代码:速度快,电视不同CPU平台的代码无法兼容. java则是使用java的编译器先将其 ...

  8. javascript权威指南读书笔记之二——词法结构

    本章讲述的内容,用通俗的语言来说,就是应该注意的地方,这些也许和我们所学的其他语言类似,也许完全不同,比如一开始就介绍说javascript程序中的每个字符都是用两个字节表示的,但有些程序设计者习惯于 ...

  9. HTTP权威指南读书笔记(一)HTTP概述、URL和资源及报文详解

    一.HTTP概述 1.WEB客户端和服务器. 2.资源:资源可以是各种格式的静态文件,也可以是应用程序. 3.媒体类型 4.URI:统一资源标识符 URL:统一资源定位符. URL的第一部分称为方案: ...

最新文章

  1. 在Cisco路由器中配置DHCP服务器
  2. PMP认证_计算题公式
  3. linux常用关机、重启、注销命令
  4. 技术帖:砖混、砖木、钢混、板楼、塔楼、框架、框架剪力墙等概念之区别优劣...
  5. 家庭作业(信息学奥赛一本通-T1430)
  6. centos7 下 的lamp 的安装原创详细教程
  7. anroid抓包工具tcpdump的用法
  8. OpenStack KVM环境搭建
  9. 冰点密码破解 — 强悍的调试器 SOFTICE 1
  10. 漏洞补丁在线更新失败或软件安装提示ERROR的解决方案
  11. 华理计算机专硕奖学金,华东理工大学研究生课程学习奖学金评定方法(试行)
  12. pzh-web前端学习汇总-大二
  13. 操作系统进程线程区别、并发和并行、内存和外存
  14. 贼法术牧萨nbsp;2800
  15. 手机用计算机微信运动记步吗,微信运动到底是如何记录步数的?
  16. 拒酒词,好难找哟,留到有用
  17. Whipple防护结构的建模与仿真技术
  18. CentOS7上安装Snipe-IT4.6.3详细过程及注意事项
  19. 计算机专业评级高校b,国内大学计算机专业的排名是怎样的?
  20. 计算机键盘space键在哪,space是哪个键,详细教您space是哪个键

热门文章

  1. 2021年全球与中国农用拖拉机变速器行业市场规模及发展前景分析
  2. 有哪些原创的微信公众号推荐?(it技术编程类)
  3. jconsole本地连接失败
  4. Android学习博客和文章存档
  5. pandas学习笔记四:运算方法和运算工具
  6. MATLAB图形加标注的基本方法入门简介
  7. 计算机的综合应用图片,计算机软件综合应用.PPT
  8. 结交各大云平台 IoT 专家的机会来啦!
  9. 怎么更改电脑默认下载位置?
  10. 深度学习概述-从神经计算角度