《图解HTTP》笔记

来源:互联网 发布:手写板软件 编辑:程序博客网 时间:2024/05/22 15:43

这一次想换一下另外一种记笔记的方法,就是类似复述性的小结。

第一章 了解Web及网络基础

这一章主要是对一些背景做一些介绍,其中主要的应该是TCP/IP的分层管理,它采用的是分层管理:应用层,传输层,网络层和数据链路层。这样的好处是各层主要去做好自己分内的事,而不要去考虑其它层的问题,维护起来也更加方便。这就有点像面向对象里的封装,可以传一些参数进去方法里实现就行了,至于方法里是怎样的实现?I don't care.只要最后给我个想要的结果就行了。

1.
那么:
应用层决定了向用户提供应用服务时通信的活动,像FTP,DNS,HTTP等。
传输层对应用层提供处于网络连接中的两台计算机之间的数据传输。有TCP和UDP两个协议,
网络层用来处理在网络上流动的数据包,在众多网络选项中选择一条传输的路径。
链路层用来处理连接网络的硬件部分,如网卡,光纤之类的可见硬件。

2.上面的TCP/IP不是指协议,而是指一个互联网相关的各类协议族的总称。这里要讲到的TCP,IP则是TCP协议和IP协议。
与HTTP关系密切的三个协议:TCP,IP,DNS

(1)IP协议位于网络层,几乎所有使用网络系统的都会用到它,它的作用就是把各种数据包传送给对方,而其中最为重要的就是IP地址和MAC地址,这时候往往就会用到ARP协议,通过通信方的IP地址就可以查出它的MAC地址。

(2)TCP协议位于传输层,提供可靠的字节流服务,即将大块数据分割成报文段为单位的数据包来进行管理,并且它能确认数据是否准确送达对方,所以说它可靠。(典型的三次握手)

(3)DNS与HTTP一道位于应用层,它提供的是域名到IP地址之间的解析服务。它可以通过域名查找IP地址,或逆向从IP地址反查域名。

图来自《图解HTTP》第15页,用于描述各协议与HTTP协议的关系。

第二章 简单的HTTP协议

HTTP是不保存状态的协议,为了保存状态功能,引入了Cookie技术。它会根据从服务器端发送的响应报文内一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie,这样下次客户端向服务端请求的时候,会将Cookie的值发送出去。

HTTP1.1采用了持久连接,即只要任意一段没有明确提出断开连接,则保持TCP连接状态。相比之前每次通信都要断开再重新连接,即当一个页面里有十张图片,以往需要连接断开十次,现在只要一次连接请求就行了。
1.

2.


后来在持久连接的基础上,增加了管线化,即可以同时发送多个并行请求,而不需要一个一个的等待相应。
3.


第三章 HTTP报文内的http信息

用于HTTP协议交互的信息被称为HTTP报文。
客户端的称为请求报文,服务器端的称为响应报文。
HTTP大致可分为报文首部和报文主体两块,由最初出现的空行(CR+LF)来划分。




请求行:包含用于请求的方法,请求的URI和HTTP版本;
状态行:包含表明相应结果的状态码,原因短语和HTTP版本;
首部字段:包含表示请求和相应的各种条件和属性的给类首部。(一般有通用首部、请求首部、响应首部和实体首部4种)
其它:包含HTTP的RFC里未定义的首部(Cookie等)

为了提升传输的速率,可以通过压缩或是分割的编码来处理内容。

当含有多类型的实体时,HTTP里就对此采用了多部分对象集合,它包含的对象有以下几部分:
multipart/form-data



multipart/byteranges


有几个关键的点:
1.当使用多部分对象集合时,需要在首部字段里加入Content-type;
2.使用boundary字符串指明各类实体,在开始前使用“--”标记,如--THIS_STRING_SEPARATES;然后在结束的时候,末尾加上“--”,如--THIS_STRING_SEPARATES--。
3.当我们需要分范围来下载内容的时候,就要采取范围请求:如Range:bytes 5001-10000表示只请求5001-10000字节内的资源。它的响应状态码为206 Partial Content;如果是多重范围的请求,则响应的首部字段Content-Type要先标明multipart/byteranges。
4.如果服务端无法响应范围请求,则返回状态码200 OK和完整的实体内容。

这一章的最后看一下内容协商,书中举例说像打开一个网站的时候,会根据中英文的设定不同来打开不同字体的网页,这种机制就叫做内容协商。
由服务器进行的内容协商叫 服务器驱动协商(Server-driven Negotiation)
由客户端进行的叫 客户端驱动协商 (Agent-driven Negotiation)
两种结合在一起叫 透明协商 (Transparent Negotiation)

第四章 返回结果的HTTP状态码



第五章 与HTTP协作的Web服务器

HTTP1.1规范允许一台HTTP服务器搭建多个Web站点。

HTTP通信时,在客户端与服务器之间的还有一些用于通信数据转发的应用程序,书中主要讲了代理网关隧道三种。
首先是代理
它是客户端与服务器之间的中间人,它不改变请求的URI


我们使用代理服务器主要是利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制等等。
它的使用方法可以通过两种基类来划分:一是是否使用缓存;二是是否修改报文;
使用缓存即是说预先将资源的副本保存在代理服务器上,这样当有请求的时候,代理服务器就不会从源服务器那里获取资源,直接将副本返回即可。

其次是网关
它与代理的工作机制相似,但它在此基础上多了可以提供非HTTP协议服务,即可以提高安全性,可以在客户端与网关之间的通信线路上加密。

最后是隧道
隧道可按要求建立一条与其他服务器的通信线路,然后再加上各种加密手段进行通信,它的目的是为了确保客户端能与服务器端进行安全的通信。

第六章 HTTP首部

首先看下HTTP报文的结构:

在请求报文中,报文首部里由请求行(主要包含了方法,URI,HTTP版本) + HTTP首部字段等部分构成;而在响应报文中,则是由状态行(包含了HTTP版本和状态码) + HTTP首部字段等构成。

HTTP首部字段是由 首部字段名  +  “:” + 字段值 构成。它有以下四种类型:
1.通用首部字段:
请求和响应报文都会使用的首部。

2.请求首部字段:

3.响应首部字段:

4.实体首部字段:

第七章 确保Web安全的HTTPS

HTTPS(HTTP Secure)即是HTTP+SSL组合使用的结果(http + 加密 + 认证 + 完整性保护 = https)。

HTTPS的安全通信机制:


(1)客户端向服务端ClientHello开始SSL通信;
(2)服务器接收到请求后,会向客户端ServerHello报文作为回应,然后再发送Certificate报文(包含空开密钥证书),然后发送Server Hello Done结束最初的SSL握手协商部分。
(3)然后客户端发送Client Key Exchange报文作为回应 ,再发送Change Cipher Spec报文提示服务器在接下来的通信过程采用Pre-master secret密钥加密,然后发送Finished报文,等待服务器返回是否校验成功。
(4)服务器同样发送Change Cipher Spec报文,然后发送Finished报文。这样两者Finished报文交换完毕,即可采用加了SSL的HTTP请求了。
(5)客户端发送HTTP,服务端也返回相应的HTTP数据。(在此时的应用层会附加MAC(Message Authentication Code)报文摘要,用于保护报文的完整性)
(6)最后客户端断开连接,发送close notify 和 TCP FIN报文

第八章 确认访问用户身份的认证




0 0
原创粉丝点击