HTTP协议是非常重要的应用层协议,有很多应用都是基于它构建,比如web浏览器、服务器等等,因此我们很有必要去深入学习它。《权威HTTP指南》整本书穿插了很多的图片,所以理解起来相对其他书快也很多。

本书第一部分详尽的讲解了HTTP协议的基本知识,包括请求响应报文的格式,常见状态码等等。第二部分是Web架构方面的知识:最基本的Web服务器的结构、代理、缓存、网关、隧道等等一系列概念,还讲解了写一个爬虫程序要注意的东西。第三部分则是叙述了关于识别认证与安全。第四、五部分则涵盖了HTTP报文主体和Web内容发布的知识。

总体来说,本书涉及的知识面非常广,读完本书你会对HTTP协议以及Web架构有一个基本了解。但是有利必有弊,本书涉及的内容都不算太深入,我建议读完本书可以选一小部分自己去具体实现一下, 比如这个课题可以是自己可以写一个Web Server,然后一步一步添加自己想要的功能。以此来加深自己对HTTP协议的理解。

下面先放上我整理的思维导图:

接下去是每章一些重点笔记:

section1  HTTP:web的基础

ch1  概述

1. MIME类型(多用途因特网邮件扩展),最初是为解决不同电子邮件系统搬运报文的问题。与content-type有关。

2. URI统一资源标识符

URL统一资源定位符,URL由方案如http://,地址如www.joes-hardware.com,web服务器的某个资源如/specail/saw-blade.gif组成。几乎所有的 URI都是URL。

URN统一资源名,作为特定内容的唯一名称使用,与目的资源所在地无关。

3. HTTP事务由请求报文和响应报文组成。

4. HTTP常用方法:

a)    GET从服务器获取一份文档。

b)    PUT向服务器写入文档。

c)     DELETE从服务器删除资源,客户端无法保证删除操作一定执行。。

d)    POST通常用来将表单中的数据发给服务器。

e)    HEAD仅发送命名资源响应中的首部。

i.         在不获取资源的情况下了解资源,比如类型。

ii.         通过状态码查看某个资源是否存在。

iii.         通过查看首部,测试资源是否被修改。

f)     TRACE对可能经过代理的报文进行追踪,响应报文主题携带原始请求报文。

g)    OPTION请求服务器告知其支持的各种功能。

5. 常用状态码:

a)    200,OK文档正确找到。

b)    302,redirect重定向。客户端应使用Location首部给出的URL临时定位资源。

c)     301,Moved Permanently。永久移除,也要Location首部。

d)    304,Not Modified。说明资源未被修改。

e)    404,Not Found,客户端错误,无法找到。

f)     401,Unauthorized,未授权需要输入用户名密码。

g)    5XX,服务器错误代码。

6. TCP提供了无差错,按序传输,可以在任意时刻传送未分段的数据流。

7. 基本的浏览器连接处理步骤如下:

a)    浏览器从URL解析出服务器主机名和端口号,主机名转换为IP地址。

b)    浏览器与web服务器建立一条TCP连接。

c)     浏览器发送HTTP请求报文。

d)    服务器发回一条HTTP响应报文。

e)    浏览器显示文档。

8. web的结构组件:

a)    代理:接受HTTP请求,并转发给服务器,并可对请求和响应过滤。

b)    缓存:特殊的HTTP代理服务器,缓存最近经过代理传送的常用文档,下一个请求同意文档的客户端就可享受缓存的私有副本服务了。

c)     网关:一种特殊的服务器,通常用于HTTP流量转换成其他协议。

d)    隧道:一旦建立,可在两条连接之间对原始数据进行盲转发的HTTP应用程序,比如通过HTTP连接,承载SSL流量。

e)    用户代理:如web浏览器,爬虫。

ch2         URL与资源

1. URL:http:// www.joes-hardware.com/seasonal/index-fall.html

URL方案://服务器位置/资源路径

2.URL通用格式:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?query#<frag>   最重要的部分是方案,主机和路径

2. 相对URL与绝对URL:

a)    转换算法。

b)    基础URL通常在资源中显示提供,或在封装资源中找到。

3. 自动扩展URL:

a)    浏览器对主机名扩展,如加上www等。

b)    历史扩展。

4. 编码机制通过转义机制表示不安全字符,%跟两个ASCII码的十六进制数。一些常用的保留字符包括: % / . .. # ? ; :等

5. 常用方案:http,https,ftp,rtsp(实时流传输协议),file,news,telnet。

ch3  HTTP报文

1. 请求报文的格式:

<method><request-URL> <version>    URL可以相对路径,只要首部包含了host

<headers>

<entity-body>

响应报文的格式:

<version><status> <reson-phrase>

<headers>

<entity-body>

2. 首部分类:

a)    通用首部:

i.         Connection允许制定C/S之间连接请求有关选项。

ii.         Via显示报文经过的中间代理。

iii.         Date报文被创建的时间

b)    请求首部(包括Accept,条件请求,安全请求首部):

i.         Host接受请求的服务器主机名和端口号。

ii.         Accept告诉服务器能够发送哪些媒体类型

条件请求:

iii.         If-Modified-Since除非在某个指定日期后被修改过,否则限制该请求

iv.         If-None-Match提供的实体标签与当前文档实体标签不符,就获取文档。

v.         If-Unmodified-Since除非在某个指定日期没被修改过,否则限制该请求。

安全请求:

vi.         Authorization包含客户端提供给服务器用于自身认证的数据

c)     响应首部(为客户端提供一些额外信息,包括协商,安全响应首部):

i.         Age从请求报文创建开始的响应持续时间

d)    实体首部(提供有关实体及其内容的大量信息,包括信息性,内容和实体缓存首部):

信息性:

i.         Allow列出可对此实体执行的请求方法。

ii.         Location

内容:Content-Type,Content-Encoding,Content-Language,Content-Base(基础URL)等。

实体缓存:Etag,Last-Modified,Expires等。

e)    扩展首部:应用程序自己定义的非标准首部。

ch4  连接管理

1. web浏览器通过TCP连接与服务器的交互过程。

2. TCP的数据通过IP分组的小数据块发送。HTTPS就是在HTTP与TCP之间插入了一个SSL密码加密层。

3. 四元组唯一确定一组TCP连接。

4. 利用TCP套接字编程:

a)    服务器:

i.         创建新的套接字socket

ii.         将套接字绑定到端口bind

iii.         允许套接字连接,监听listen

iv.         等待连接accept

v.         一旦应用程序有连接到来,就读read,处理HTTP请求报文

vi.         发送HTTP响应write

vii.         关闭连接

b)    客户端

i.         获取IP地址和端口号

ii.         创建新的套接字socket

iii.         连接到服务器IP:port ,connect

iv.         连接成功后,发送HTTP请求write

v.         等待HTTP响应read

vi.         处理响应后,关闭连接

5. 对TCP性能的考虑

a)    HTTP事务的时延:

i.         DNS解析

ii.         TCP引起的相关时延

1.     TCP连接握手

2.     TCP慢启动拥塞控制

3.     Nagle算法,通常可设置TCP_NODELAY禁用

4.     延迟确认算法

5.     TIME_WAIT时延和端口耗尽,防止重用端口。

a)    为防止端口耗尽,可增加客户端负载生成机器数量。

b)    在C/S之间循环使用几个虚拟IP地址。

iii.         传送报文时延

6. Connection首部可承载的标签:

a)    HTTP首部字段名

b)    任意自定义的非标准标签

c)     值close,说明操作完成后需关闭这条持久连接

解析过程:HTTP应用程序收到待Connection首部的报文时,接收端会解析所有选项并引用,且在转发下一跳之前,删除Connection首部及其中列出的所有首部。类似一些Proxy-Authenticate,Proxy-Connection,Transfer-Encoding和Upgrade也不能被转发。

7. 事务处理的方式:

a)    串行,每个事务都需要建立一条新的连接,连接时延和慢启动时延就会叠加起来。

b)    并行连接。通过多条TCP连接发起并发的HTTP连接。缺点:带宽有限,打开大量连接会消耗大量内存资源,导致服务器性能严重下降。通常将并行连接总数限制为4个。

c)     持久连接。重用TCP连接,以消除连接及关闭时延。在事务处理结束后仍保持打开状态的TCP连接。在1.0的规范如果不加Keep-alive选项默认是关闭的。

而HTTP1.1Keep-alive持久连接在默认情况下激活的,要在事务处理后将连接关闭,HTTP/1.1应用程序需要显示的在报文中添加Connection:close首部。

还有一些要注意的:

i.         只有当连接上所有报文实体部分的长度与Content-Length一致,连接才持久。

ii.         HTTP1.1的代理分别管理客户端和服务器的持久连接。

iii.         不管Connection取什么值,HTTP、1.1设备都可以再任意时刻关闭连接。

iv.         HTTP/1.1必须能够从异步的关闭中恢复。

v.         一个客户端对任何服务器或代理最多只能维持两条持久连接。

d)    管道化连接,通过共享的TCP连接发起并发的HTTP请求。响应到达前,可将多条请求放入队列,当第一条请求到达服务器,第二条和第三条请求可以开始发送。高延迟的网络条件下,可降低换回时间,提高性能。一些限制:

i.         必须按照相同顺序回送HTTP响应报文。

ii.         HTTP客户端必须能应对过早关闭连接的情况,并重新请求。

iii.         不该用管道化方式传送回发送非幂等请求(执行多次请求,执行的结果都不同,常见的幂等请求GET,HEAD,PUT等),如POST,因为无法安全的重试,出错时有永远无法被执行的风险。

8. 关闭连接:客户端或代理收到的实体长度与Conte-Length不匹配,接收端就应该质疑长度正确性,如果接收端为缓存就不该缓存此响应。代理不应该矫正Content-Length。正确的关闭:想要正确的关闭连接的应用程序应该先关闭其输出信道(服务器会收到客户端流结束通知),然后周期性的检查其输入信道的状态(查找数据,或流的末尾)。若一定时间对端未关闭输入信道可强制关闭。

section2  HTTP结构(Web架构)

ch5  Web服务器

1. Apache Web服务器内核有超过5W行代码,支持了HTTP/1.1各种特性:丰富的资源支持,虚拟主机,访问控制,日志记录,配置、监视和性能特性。

web服务类型:

a)    单线程Web服务器,一次处理一个请求,只适用于低负荷服务器。

b)    多进程/多线程web服务器。为每条连接创建一个进程/线程,同时绑定了I/O。通常对最大数量限制。

c)     复用I/O服务器。只有在有事可做才对连接进行处理,空闲连接的等候不绑定线程/进程,不绑定I/O。

d)    复用的多线程web服务器。多线程和复用结合,多个线程每一个都在观察打开的连接,并对每条连接执行少量任务。

2. 基于Web服务器请求步骤:

a)    建立连接,TCP三次握手

b)    接受请求,读取HTTP请求报文。可用特定数据结构存储请求报文,以便快速访问。

i.         解析请求行,查找方法,URI,版本号,各项之间空格分隔,以回车CRLF作为行结束。

ii.         读取以CRLF结尾的报文首部。并检测空行。

iii.         读取请求主体。

c)     处理请求,解释报文各字段含义,并采取行动。

d)    访问资源,访问报文指定资源。

i.         将URI映射为Web服务器文件系统对应内容

ii.         Web服务器通常存在文档根目录如docroot,专门存放Web内容

iii.         虚拟托管的docroot通过IP地址和Host首部区分不同Web站点

iv.         对目录URL请求通常返回一个目录列表

v.         将URI映射到按需动态生成内容的程序。CGI是一种早起出现的一种简单的服务端应用程序执行接口。

e)    构建响应,创建带正确首部的HTTP响应报文。

f)     发送响应。

g)    记录事务处理过程,将已完成事务处理记录在一个日志文件。

ch6  代理

1. HTTP的代理服务器即使Web服务器又是Web客户端。主要分为公共和私有代理。

2. 代理连接的是两个或多个使用相同协议的应用程序,网关连接的是不同协议的端点。实际上代理也常会实现网关的功能。

3. 代理的作用:内容过滤,文档访问控制,安全防火墙,Web缓存,匿名者

内容路由器(根据因特网流量状态以及内容类型将请求导向特定Web服务器)

反向代理(接受发给Web服务器的真实请求,发起与其他服务器的通信,也可加速慢速服务器的访问,作为服务器加速器使用),

转码器(发给客户端之前进行转码,如图片压缩)。

4. 代理服务器的部署:

a)    出口代理:本地网络的出口点。

b)    访问(入口)代理,放在ISP访问点上,ISP使用缓存代理来存储常用文档的副本。

c)     反向代理:在Web服务器之前作为替代物。或放在慢速服务器前提高性能。反向代理通常会直接冒用Web服务器的名字和IP地址。

5.代理的级联。几个动态选择父代理的例子:

a)  负载均衡,自代理根据当前父代理的工作负载级别来选择父代理。

b)  地理位置附近的路由。

c)  协议/类型路由,根据URI将报文转发到不同父代理和原始服务器上。

d)  基于订购的路由。

5. 代理如何获取流量:

a)    修改客户端使HTTP请求直接发给代理。

i.         手动配置,预先配置浏览器

ii.         PAC代理自动配置,提供一个URI指向一个JavaScript的代理自动配置文件。

iii.         WPAD,Web代理自动发现协议。

b)    通过交换设备及路由设备进行拦截,并将流量导入一个代理。

c)     放在Web服务器前的代理服务器服务器直接假扮Web服务器的名字和IP,通过修改DNS的命名空间实现。

d)    通过Web服务器将HTTP请求重定向到一个代理。

6. 代理URI与服务器URI的区别

a)    未设置使用代理,发送部分URI

b)    设置代理,发送完整URI

c)     拦截代理会受到部分URI

d)    如果是显示的代理请求,应该使用完整的URI,如果是Web服务请求,使用部分URI和虚拟Host首部。如果代理没有足够信息确定原始服务器,就必须返回一条错误报文。一般禁止拦截代理转发URI时重写绝对路径,除用/取代空格。

7. 对主机名解析的几种情况:

a)    没有提供显示代理时,使用服务器的情况,浏览器对主机名自动扩展。

b)    提供显示代理的情况下,由代理完成对不完整主机名的扩展。

c)     有拦截代理时对URI的解析,因为拦截代理对客户端不可见,相当于使用服务器的情况。不同的是对服务器来说,如果客户端解析成功有了一张IP地址表,第一个IP不对,会依次尝试每个IP;而对拦截代理来说 ,只会拦截第一个连接请求。但是代理也提供了容错机制,代理可以通过解析Host首部主机名,也可以对IP地址反向DNS查找其他IP地址。

8. 追踪报文

a)    Via首部字段用于记录报文的转发,诊断报文循环,标识请求/响应链上所有发送者的协议能力。

b)    Via由协议名,协议版本,节点名,节点注释组成。

c)     请求Via首部通常与相应Via首部相反。

d)    Server响应首部字段对原始服务器使用的软件进行了描述。

e)    Via并不应该转发防火墙后面的主机名和端口号。如果有强烈隐私要求需要合并内部拓扑结构,代理应该将有序Via路标条目合并为一个联合条目。

9. TRACE方法:当TRACE请求到达目的服务器时,整条请求报文都会被封装在一条HTTP响应的主题中回送到发送端。其中的Max-Forwards限制经过代理跳数,当该值为0必须回送给发送端。

10. 代理认证:代理服务器可以返回一个要求使用访问证书的407 Proxy-Authenticate状态码,以及描述怎样提供这些证书的407 Proxy-Authenticate首部字段。

ch7  缓存

1. 缓存的优点:

a)    减少冗余的数据传输。

b)    缓解了网络瓶颈的问题,改善有限广域带宽造成的网络瓶颈。

c)     降低了对原始服务器的要求,在破坏瞬间拥塞时显得非常重要。

d)    降低了距离时延。

2. 命中和未命中的:可以用已有副本提供服务称为命中的。

a)    再验证使用GET If-Modified-Since,命中回应HTTP 304 Not Modified响应,否则服务器向客户端发送一条带完整内容的HTTP 200 OK 响应,若服务器对象被删除了,就回应404

b)    客户端没有办法区分是否来自缓存的响应。唯一的办法是查看Date首部和Age首部,若时间较早则可认为来自缓存。

3. 代理缓存的层次化结构:在较小缓存未命中的请求会被导向较大的父缓存。但是在代理链路变得很长的时候,这种性能损耗会非常明显。实际常常限制在2-3个代理内。

4. 网状缓存,也称为内容路由器,用以代理缓存之间更为复杂的方式进行对话。

5. 缓存的处理步骤:

a)    接受

b)    解析

c)     查询

d)    新鲜度检测:在有限时间内不用于服务器再验证,成功对新鲜度更新,否则重新从服务器获取一份文档。

e)    创建响应

f)     发送

g)    日志

6. 缓存向服务器条件方法再验证:

a)    If-Modified-Since:<date>制定日期之后被修改了就执行请求的方法,可与Last-Modified首部配合使用,只有内容修改后与已缓存内容不一致才获取内容(包括一个新的过期日期)。

b)    If-None-Match:<tags>服务器可为文档提供标签。W/来表示弱验证器,弱验证器允许对一些内容进行修改,只要主要含义不变化。注意:原始服务器一定不能为两个不同的实体重用一个特定的强实体标签值。

服务器提供了实体标签和最后修改时间两者就都使用。

7. 服务器对缓存的控制:

Cache-Control:max-age=3600,单位为秒,相对时间。

Expires绝对时间,不推荐。

Cache-Control:must-revalidate,缓存在为客户提供是,必须向服务器再验证,加入服务器不可用,就返回504Gateway Timeout错误。

8. 如果服务器对缓存的响应中没有前面2个首部,可采用LM-Factor试探性过期算法。

9. 客户端可以提供Cache-Control首部强化放松对过期时间的限制。

a)    如max-stale,缓存可随意提供过期文件。后面如果有=<s>则在未来<s>秒要保持新鲜。

b)    max-age,缓存无法返回缓存时超过<s>s的文档。

c)     no-cache,除非资源再验证,否则客户端不接受缓存。

d)    no-store,缓存应尽快删除文档。

10.新鲜期算法:

为计算新鲜期需计算两个值:以缓存副本的使用期期和已缓存副本的新鲜生存期。使用期小于新鲜生存期就是新鲜的。缓存通常将服务器过期信息与客户端新鲜度要求结合在一起。

使用期的计算:缓存通过查看Date或Age首部来判断响应已使用时间。完整使用期包括服务器处理时间,响应的网络延时,缓存停留时间,加上时钟补偿。

ch8  网关、隧道及中继

1. 网关:在HTTP与其他协议及应用程序之间其接口作用。应用程序请求网关处理请求,网关访问资源提供响应。比如网关可以向数据库发送查询语句,或者生成动态相应。三个Web网关实例:

a)    HTTP/FTP服务器端FTP网关,主要作用是协议转换。

b)    HTTPS/HTTP客户端安全网关,网关通过SSL收到一条加密请求,并解密发给服务器。

c)     HTTP/CGI服务器端应用程序网关,网关通过应用程序服务器网关API,将HTTP客户端连接到服务器端的应用程序,如购物,天气查询等。

服务器网关:HTTP/*,通过HTTP与客户端对话,通过其他协议与服务器通信。

客户端网关:*/HTTP,通过其他协议与客户端对话,通过HTTP与服务器通信。

2. 将HTTP流量导向网关使用的方式与将流量导向代理的方式相同。

3. 最常见的网关是应用程序服务器,如:客户端通过HTTP连接到应用程序服务器,应用程序将请求通过一个网关应用编程接口API发送给运行在服务器的应用程序。

4. 第一个流行的应用程序网关API就是通用网关接口CGI,广泛用于动态HTML,信用卡处理,数据库查询等任务。扩展API允许程序员把自己的代码嫁接到服务器上或用自己的代码把服务器的一个组件完整的替换出来。

5. XML是允许Web应用程序之间相互通信的标准和协议。

6. Web隧道通过HTTP应用程序访问使用非HTTP协议的应用程序。

7. CONNECT方法请求隧道网关创建一条到达任意目的服务器和端口的TCP连接(可和认证配合使用),并对后继数据进行盲转发。一旦建立了连接,网关就会发送一套HTTP200 Connection Established响应通知客户端。网关作为隧道的端点。假设打开到端口443的连接,隧道位于客户端和网关之间,网关和服务器之间是普通的SSL连接。

8. CONNECT语法与HTTP请求类似,只是把URI替换为主机名和端口号。

9. 作为一种性能优化方法,允许客户端在发送CONNECT请求之后,接受响应之前,发送隧道数据。在请求之后以管道数据发送数据的客户端如果发现回送的响应是认证请求等,就必须做好重发请求数据的准备。

10.隧道可以经由HTTP连接传输非HTTP流量比如SSL流量,单纯的SSL流量会被过滤。

11.如果简单盲中继是单任务的,且不支持Connection首部,就会挂起

ch9  Web机器人

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

2. 爬虫通过简单的HTML解析,将这些链接提取出来,并将相对URL转换为绝对形式。

3. 访问管理以及要注意的地方:

a)    书和散列表,来记录已访问过的URL。

b)    有损的存在位图。用一个散列函数将每个URL转换成一个定长的数字。

c)     集群机器人,机器人之间需要通信,来回传送URL。

d)    注意别名带来的影响,要消除别名带来的影响。

e)    注意文件系统连接环路(符号连接)

f)     防止网关动态的生成无数的假Web页面,每个假页面指向另一个假页面。

4. 避免循环和重复的方法:

a)    规范化URL。将URL转换为标准形式。

b)    广度优先的爬行。

c)     节流。限制一段时间内机器人可从一个Web站点获取的页面数。

d)    限制URL的大小。

e)    URL/站点黑名单。

f)     模式检测。文件系统的符号链接和类似的错误配置造成的环路会遵循某模式。

g)    内容指纹。通过计算页面内容的字节的校验和判断是否爬行过。

h)    人工监视。

5. 机器人识别请求首部:

a)    User-Agent机器人名字

b)    From机器人管理者的邮箱

c)     Accept告知服务器可发送哪些媒体类型。

6. 机器人对虚拟主机:

a)    Host首部

b)    条件请求。

7. 服务器对响应的处理:

a)    常见状态码。

b)    实体的处理。

8. 行为不当的机器人:

a)    失控的机器人,陷入环路对服务器造成很大负担。

b)    对失效的URL访问,会使服务器产生一大堆错误日志。

c)     请求很长的URL。

d)    爱打听的机器人。如果是私密信息应该有某种机制丢弃数据。

e)    动态网关访问。机器人获取的内容来自网关应用程序的URL,计算开销很高。

9. robot.txt是在服务器文档根目录的机器人自愿约束标准。

10.搜索引擎:

a)    a)现代搜索引擎都构建了“全文检索”的复杂本地数据库,相当于Web的一个快照。

b)    假设有三份文档ABC,则全文索引列出了包含每个单词的文档。

c)     用户通过HTTP方法填写HTML表单发送给服务器,服务器转发给搜索网关应用程序,这个程序将结果返回给服务器,服务器进行相关性排名(通过爬行Web过程的数据统计),服务器再把结果返回给用户。

ch10  HTTP-NG

1. HTTP发展中存在的问题:

a)    复杂性。正确的实现HTTP软件是复杂,容易出错的。

b)    HTTP难以实现递增式扩展。HTTP应用程序没有自主的功能性扩展技术。

c)     性能。

d)    传输依赖性。依赖于TCP/IP传输

2. HTTP-NG主题:模块化及功能增强。

a)    建议将协议模块化为三层:

i.         Web应用层。内容逻辑管理。模块化。

ii.         远程调用层。定义了请求响应的功能。

iii.         报文传输层。

section3  识别、认证与安全

ch11  客户端识别与cookie机制

1. 用户识别机制:

a)    HTTP首部。From提供Email,但很少浏览器会发送;User-Agent提供用户浏览器信息;Referer提供用户来源URL,用户兴趣所在。

b)    IP地址跟踪。

c)     用户登录。

d)    胖URL。为每个用户生产特定版本的URL来追踪用户的身份。

e)    cookie。

i.         会话cookie,默认。

ii.         持久cookie,设置了max-age和Expires。

2. 浏览器负责存储cookie信息,故又称客户端侧状态。浏览器可以向Set-Cookie响应首部添加一个Domain属性来控制哪些站点可以看到那个cookie

3. cookies版本0由网景公司定义。cookies版本1由RFC定义。Cookies2请求首部负责在能够理解不同cookies规范版本的客户端和服务器之间进行互操作性的协商。

4. cookie与会话跟踪过程:访问amzon

a)    浏览器请求amzon.com根目录

b)    服务器重定向到一个电子商务软件的 URL上

c)     客户端对重定向URL发起请求。

d)    服务器在响应上贴上两个会话Set-cookie,并将用户重定向到另一个URL。这个新URL是胖URL。

e)    客户端请求新URL。

f)     服务器再次发送重定向,及附加另外2个cookie。

g)    客户端获取home.html并将四个cookie都发送出去。

h)    服务器回送内容。

5. Cache-Control:no-cache=“Set-Cookie”除了Set-Cookie之外文档是可缓存的。

强制缓存与原始服务器重新验证每条请求(must-revalidate,max-age=0),并将返回到所有Set-Cookie都合并到响应中,就可以防止向多个用户发送相同Set-Cookie首部。

6. 第三方Web站点使用持久cookie跟踪用户,将这种做法与IP地址和Refere首部信息结合在一起,就可以构建起相当精确的用户档案和浏览模式信息。

ch12 基本认证机制

1. 认证的四个步骤:

a) 用户GET请求

b) 服务器返回401 Unauthorized状态,及首部www-Authenticate:basic realm=“安全域”。

c) 授权,用户发送Authorization,说明认证算法,用户名和密码。

d) 成功后返回200 OK,有些还会返回Authentication-info首部。

2. Base-64用户名/密码编码,可以很轻易的解码,时间就是“明文”传送的。通常将基本认证和加密数据传输SSL配合使用会更加安全。

ch14  安全HTTP

1.     数字加密:

a)    密码

i.         明文通过编码器形成密文,密文通过解码器形成明文。

b)    密钥:解码器正常工作必须使用。

i.         数字密钥知识数字,是编/解码算法(函数)的输入

c)     对称秘钥加密技术:编码密钥和解码密钥一样。128位非常强大。缺点是在发送者和接受者对话前,要有共享的保密密钥。N个节点需要N2个保密密钥。

d)    不对称秘钥加密技术

e)    公开秘钥加密系统:编码密钥众所周知,但仅主机知道私有解密密钥。RSA算法。

f)     数字签名:

i.         签名可以证明是作者编写了这条报文。

ii.         签名可以防止报文被篡改。报文被篡改则校验和不匹配,校验和还真有作者保有的私有密钥才能产生。

g)    数字证书:包含了某个受信任组织担任的用户或公司相关信息。大多数证书的标准格式X.509 v3结构。

2.     HTTPS:将HTTP报文发送给TCP之前,先发送给安全层SSL协议加密后发送的。

a)    SSL握手:

i.         客户端发送可供选择的密码并请求证书。

ii.         服务器发送选中的密码和证书。

iii.         客户端生成保密信息,客户端和服务器生成密钥。

iv.         客户端告知所有握手信息的MAC值给服务器(防止握手被篡改),服务器应答后开始加密过程。

3.     代理无法转发加密请求的解决办法:HTTPS SSL隧道协议。HTTP通过CONNCECT扩展方法发送明文形式的端点信息,打开一条到所期望主机和端口号的连接,之后客户端服务器之间以隧道形式传输数据。

section4  实体、编码、国际化

ch15实体与编码

1.     HTTP/1.1定义了10中基本首部字段:Content-Type(MIME类型,如何解释数据),Content-Encoding(是否被压缩或重编码),Content-Length,Content-Language,Content-Location,Content-Range(若是部分实体,此首部说明它是整体哪个部分),Content-MD5,Last-Modified,Expires,Allow,ETag,Cache-Control。

2.     CRLF对应16进制编码:0x0d0a。

3.     Content-Length是带有实体主体报文必须使用的,能够检测出服务器崩溃而导致的报文结尾,并对共享持久连接的多个报文进行正确分段。且说明的是编码后主体的长度。

4.     确定实体主体长度的规则:

a)    若特定HTTP报文类型不允许带主体,此时Content-Length是提示性的,不说明实际长度。如HEAD。

b)    若报文含Transfer-Encoding首部,实体由“零字节块”的特殊模式结束。若此时还有Content-Length就忽略。

c)     除非发送方知道接送方可解析发送方发送的多部分媒体类型,且发送方每部分都要说明自己大小,否则就不能用该类型。

d)    若都不匹配,实体就在关闭连接的时候结束。实际上只有服务器可以这么做。

注意:服务器若无法确定报文长度,规范建议应发送400 Bad Request或411Length Required响应。

5. Content-MD5首部发送对主题运算MD5算法结果,检查报文完整性,还可做散列表的关键字,用来快速定位文档消除不必要的重复内容存储。

6. 多部分表格提交Content-Type:multipart/form-data(或为mixed);boundary=[分隔主体不同部分的字符串]。

7. 多部分范围响应Content-Type:multipart/byteranges;boundary=--[]--每部分主体用Content-Range说明属于主题哪部分。

8. 内容编码:只对主体编码,且与内容相关,通常gzip算法效率最高,Accept-Encoding首部用来说明客户端支持的方式,可以为每种编码方式附带Q(质量)说明优先级,*表任何,1.0最希望的,0.0不想接受的。

9. 传输编码同内容格式无关,报文自身结构改变。Transfer-Encoding告知使用何种编码,TE告知服务器可用哪些传输编码扩展。分块编码属于传输编码的一种,允许服务器动态创建并把主体逐块发送,只要在每块前说明每块长度(16进制表示CRLF),服务器可用大小为0的块作为主体结束的标志。拖挂可包含附带首部字段,它们的值开始无法确定比如MD5。

10. 可以先进行内容编码,再进行传输编码分块发送。分块传输编码不能多次作用在同个主题,且必须最后一个作用到报文主体。

11. Range范围请求:断点下载以及P2P点对点文件共享客户端,即为加速文档下载而从不同服务器下载同个文档的不同部分。

12. 差异编码是它通过交换对象改变的部分而不是完整的对象优化传输性能,但是实现差异编码所需的额外磁盘空间(要保存旧的副本)可能很快就将减少传输量获得的好处抵消掉。

ch16  国际化

1.     Accept-Charset首部和Accept-Language首部,告知服务器客户端支持的字符集编码和语言,以及优先顺序。

2.     字符集编码过程:目标是把语义和图形化表示隔离

a)    文档中二进制码转换成字符代码。

b)    字符代码从编码的字符集选择特定的元素。

3.     常用编码:us-ascii,utf-8

4.     Content-Language首部表示语言表示,不区分带小写

5.     URI可以在内部插入保留字符以及原本不支持的字符,通过转义实现,由%和两个16进制表示的US-ASCII组成。要注意收到一些代码之大于127的非法字符。

ch17  内容协商与转码

1.     客户端驱动的协商:不利之处是每个页面需要两次请求,第一次获取列表,第二次获取选择的副本。

2.     服务器驱动的协商:也可以用首部中的质量值q更详细的描述偏好度

a)    Accept首部,类型语言。

b)    Content首部,类型语言。

3.     透明协商:使用中间代理代表客户端与服务器协商。

a)    缓存可以根据内容协商首部发送给客户端正确的响应,假如已有缓存不正确就向服务器请求一份正确的副本保存在缓存中并发送给客户端。

b)    还可以根据特定的请求首部集如User-Agent来选择变体(如选择富媒体版或无线浏览器定制版)

4.     转码:可以由代理缓存完成

a)    格式转换,如高分辨率图片转低分辨率

b)    信息综合,提取关键信息

c)     内容注入转码,自动广告生成器,用户追踪系统

section5  内容发布与分发

ch18  Web主机托管

1.     对内容资源的存储、协调以及管理的职责统称为Web主机托管。

2.     虚拟主机托管:解决请求缺乏主机信息

a)    通过URL路径(较少使用)

b)    通过端口号(较少使用)

c)     通过IP地址:为每个网站分配不同的IP

d)    通过Host首部

3.     HTTP/1.1的Host首部:

a)    若Host首部不包括端口就用地址方案中默认的。

b)    若客户端显式使用代理服务器,客户端需要把原始服务器的名字和端口放在Host首部中,而不是代理的名字和端口。

c)     服务器必须用400状态码来响应所有缺少Host首部字段的HTTP/1.1请求报文。

4.     让网站更快:

a)    服务器集群

b)    分布式代理缓存

c)     反向代理服务器

d)    采用内容编码以更快的传输,前提是客户能解释。

ch20  重定向与负载均衡

1.     重定向的目标是尽快地将HTTP报文发送到可用的Web服务器上去。通用的重定向方法包括:

a)    HTTP重定向。第一台服务器选择一定要能处理请求负载。

b)    DNS重定向。DNS服务器决定返回哪个IP,有轮转负载均衡,最小化时延等方法。

c)     任播寻址。几台服务器使用相同IP。通过骨干路由的“最短路径”路由功能将客户端请求发送给离它最近的服务器。

d)    IPMAC转发。第二层设备(交换机或路由器)会将服务器或代理的目标地址赋予分组。

e)    IP地址转发。第四层交换机会评估分组目标端口并将重定向分组的IP地址改成代理或镜像服务器的IP地址。

2.     代理与缓存重定向技术:

a)    显式浏览器配置

b)    代理自动配置PAC

c)     代理自动发现协议WPAD等

ch21  日志记录

1.     内容包括:

a)    HTTP方法,版本,URL,响应的状态码

b)    请求响应报文主体大小

c)     事务开始的时间戳

d)    Referer首部和User-Agent首部的值

2.     常用日志格式

【计算机网络】读书笔记之《HTTP权威指南》相关推荐

  1. 读书笔记--Android Gradle权威指南(上)

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...

  2. 【读书笔记】Jenkins权威指南

    目录 一.Jenkins权威指南 二.书摘 第一章.Jenkins简介 第二章.迈入Jenkins的第一步 第三章.安装Jenkins 第四章.配置Jenkins服务器 第五章.设置构件作业 第六章. ...

  3. [读书][笔记]WINDOWS PE权威指南《零》PE基础

    参考: https://zhuanlan.zhihu.com/p/47075612 https://docs.microsoft.com/zh-cn/windows/win32/debug/pe-fo ...

  4. [读书][笔记]WINDOWS PE权威指南《一》PE的原理和基础 之 第一章 环境搭建及简单破解

    文章目录 前言 前期准备 1.1 开发语言MASM32 1.1.1 设置开发环境 下载安装masm 环境变量配置 测试是否配置成功 1.1.2 开发第一个源程序HelloWorld.asm 配置 代码 ...

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

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

  6. 读书笔记《CSS权威指南》

    阅读本书主要目的: 自从学会CSS以来,虽然熟练掌握了其使用方法和技巧,但对其底层的原理和实现并不清晰,阅读本书想进一步系统化的学习和深入研究其本质,对这门前端基础语言从熟练使用到真正理解. 第1章 ...

  7. 读书笔记《Hadoop权威指南第4版(Hadoop The Definitive Guide 4th)》

    Chapter 1 Meet Hadoop Data Storage and Analysis The problem is simple: although the storage capaciti ...

  8. 计算机网络读书笔记(二)

    一.应用层 1.1 应用层协议原理 在Web应用程序中,有两个互相通信的不同的程序:一个是运行在用户主机上的浏览器程序:另一个是运行在Web服务器主机上的Web服务器程序.这里采用的是C/S体系结构, ...

  9. 读书笔记--《MicroPython入门指南》

    MicroPython入门指南 下图是<MicroPython入门指南>思维导图,我选了150%缩放,点开即可查看.

  10. C语言书籍阅读-读书笔记--高质量程序设计指南》--C/C++,林锐

    最近闲下来想找机会参加一些编程比赛锻炼锻炼,可没有一个相关网站可以搜集这些信息,因而自己记录下来: 百度之星,http://star.baidu.com/index/developer.时间07.25 ...

最新文章

  1. CentOS中怎样安装mysql并修改密码、设置开机启动、配置远程连接
  2. 如何快速截取某段时间内的日志
  3. 基于VUE的前端crypto-js aes加密与解密
  4. [html] 如何实现多行文字梯形排版?
  5. 计算机图形学基础教程论文,计算机图形学小论文
  6. DNS(BIND) 正向解析   反向解析 基本服务的搭建
  7. css学习_文本有关的样式属性、sublime快捷生成标签
  8. 2440: [中山市选2011]完全平方数
  9. Linux内核配置和编译过程详解
  10. 嵌入式学习之QT学习---6 QT上位机开发之串口助手(下)
  11. 师慧gis三维虚拟校园在高校教学管理中的应用价值
  12. Detours Hook初探
  13. 重构改善既有代码的设计 --原则篇
  14. Ubuntu更换登录界面壁纸
  15. 益寿延年,这13种食物真是宝,能延寿10年,赶紧收藏!
  16. 苹果微信多开_史上最全微信双开 全平台【IOS/安卓/WIN】
  17. 敏捷开发中QA如何做质量管理?
  18. 【 微信小程序请求封装】【进阶版】处理401请求token过期--重新登录--重新发起刚才过期的请求
  19. STM32的AFIO时钟什么时候需要开启
  20. PR片头模板 3D全息数字扫描大脑后展示logo开场片头PR模板

热门文章

  1. 树形结构的处理——组合模式(二)
  2. java展示树形结构的两种方式
  3. IT网管软件比较一览表
  4. 记忆力很差怎么学计算机,九个方法增强记忆力 学生记忆力很差怎么办
  5. 高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据...
  6. 金融大数据分析-Jupyter-Python3-资产定价模型-CAPM
  7. SOJ 4590 简单模拟
  8. 一天的班上玩一直是想去干什么呢
  9. 畅销图书排行榜TOP10(2009上半年)
  10. python脚本一键抓考试资料网答案