图解http的读书笔记

最近一直在读《图解http》这本书,收获了特别多的东西,对http协议以及Tcp/Ip协议族也有了一定的了解,不得不说,作为对http的入门的书籍,这本书会是一个不错的选择。
其实http本身是并不复杂的东西,觉得不理解或许是因为自己不知道好多东西,所以还需要系统的学习下。
了解http协议,其实是认识http协议局限性的一个过程。看完才知道互联网上为什么做一些性能优化背后的原理,才知道为什么 Google 要出 SPDY 协议,才知道 HTTP/2.0 好在哪里,因此HTTP协议的性能和安全性的关系应该是最大的。那么我就以我最近看到的一些重点的东西来向大家进行讲解。

计算机的IP地址和Mac地址是否是唯一固定?

1、每台计算机在一次联网直到下线之前,其IP是唯一固定的。在两次联网的过程中,同一台电脑的IP地址可能是不同的,这是因为在联网的过程中使用了动态分配IP地址。
2、Mac地址从出厂的那一刻早已唯一固定,但毕竟网卡是个硬件,需要有软件来支撑,也就是说,要有操作系统俩进行识别,而操作系统识别出来的Mac地址是可变的。所以有必要解释一下,这里所说的“可以改变”并不是更改网卡中的Mac地址,而是更改ARP缓冲表中的Mac地址。

http中如何确保登录状态?

http 协议本身是不具备保存之前发送过的请求和响应的功能的,虽然这样子可以更快地处理大量的事务,确保了协议的可伸缩性,同时也减少了内存、CPU的损耗,但是,如何确保登录状态成了一个比较棘手的问题?
引入Cookie技术,实现管理的状态:
客户端获取用于验证身份的Cookie信息:
图解http的读书笔记
客户端使用Cookie来进行交互,保持管理状态
图解http的读书笔记
当然,http本身也为了减轻服务器的负载,提高了Web页面的显示速度,提出了一种持久连接的方法,即:建立一次TCP连接后进行多次请求和相应的交互(只要任意一端没有明确的提出断开连接,则保持连接)

http 首部—Content-MD5

首部字段Content-MD5算法生成的值,目的在于检查报文主题在传输过程中是否保持完整,以及确认传输是否到达。
图解http的读书笔记
在图片所示的过程中,之所以将二进制转化为Base64编码,是因为http的头部无法识别二进制值。存在的问题是:对内容的偶发性改变无从查证,且无意检测出恶意更改。既然报文的内容都可以被篡改,那么意味着Content-MD5也可以被重新计算且篡改,则处于接收的客户端是无法意识到此时接受到的Content-MD5是否已经被篡改,为了解决这个问题,我们在内容上引出了HTTPS这个部分。

保证web通信安全的HTTPS

http在刚开始时仅仅是做为HTML文档通信的一种协议,但随着web技术的飞速发展,它也开始展现出自己的不足,如下所示:
1、通信的过程中使用明文,很容易遭到攻击者的入侵。
2、不验证通信方的身份,因此可能遭遇到入侵者的伪装。
3、无法证明报文的完整性,很可能遭到篡改但察觉不出来。
针对以上的一系列问题,我们引进了HTTPS,HTTPS并不是应用层的一种新协议,只是http接口部分用SSL和TLS协议代替而已。
即:HTTPS = http + SSL/TSL 或者 HTTPS = http + 加密 + 认证 + 完整性保护 ;
对报文进行加密,对客户端、服务器进行通信方的确认,对通信途中的报文完整性进行验证,而HTTPS的及时出现解决了这一系列问题,并迅速受到了web的广泛欢迎。
为什么不一直使用HTTPS呢?
既然HTTPS相比http更加的安全,为什么不一直使用HTTPS呢?
首先,SSL必须经过加密解密处理,所以会消耗更多客户端和服务器的CPU和内存资源,导致负载增强,使得处理的请求数量随之减少。
其次,使用的证书必须要向 认证机构进行购买,而且证书的价格也比较昂贵。
所以,一般只有在包含个人信息等敏感数据的时候,才会使用HTTPS进行加密通信。

Session(会话管理)及Cookie(状态管理)

使用Cookie管理Session来弥补http协议中不存在的状态管理功能
图解http的读书笔记
在这个过程中,需要使用HTTPS对用户的登录信息进行加密处理;为了防止Session ID 被盗或者被猜出来,所以Session ID 会使用难以推测的字符,并且服务器端也需要进行有效期的管理,保证其安全性;同时为了防止跨站脚本的攻击,应该事先在Cookie内加上httponly属性。
注: Cookie始终保存在客户端, 相反的, Session 始终保存在服务期内。

以上就是我关于http认为的一些知识点,如果有什么想要再深一步的进行了解,欢迎小伙伴们留言,一起讨论。