最近在啃《HTTP权威指南》,该书有多优秀众所周知啊,光看不写假把式,所以打算看书期间整理几篇相关的文章。
一、HTTP
HTTP(超文本传输协议,HyperText Transfer Protocol)是应用层的协议,目前在互联网中应用广泛。
它被设计用于Web浏览器和Web服务器之间的通信,但它也可以用于其他目的。 HTTP遵循经典的客户端-服务端模型
,客户端打开一个连接以发出请求,然后等待它收到服务器端响应。 HTTP是
无状态协议,意味着服务器不会在两个请求之间保留任何数据(状态)。
二、HTTP1.0 ——构建可扩展性
HTTP原有的应用非常局限,浏览器和服务器迅速扩展使其用途更广:
版本信息现在会随着每个请求发送(HTTP1.0 被追加到GET行)
状态代码行也会在响应开始时发送,允许浏览器本身了解请求的成功或失败,并相应地调整其行为(如以特定方式更新或使用本地缓存)
引入了HTTP头的概念,无论是对于请求还是响应,允许传输元数据,并使协议非常灵活和可扩展。
在新的HTTP头的帮助下,增加了传输除纯文本HTML文件外的其他类型文档的能力。(感谢 Content-Type头)。
同时还开始支持一种被称为keep-alive
连接的早期实验性持久连接,下图显示了keep-alive连接的一些性能优点,图中将在串行连接上实现4个HTTP事务的时间线与在一条持久连接上实现同样事务所需要的时间线进行了比较。由于去除了进行连接和关闭连接的开销,所以时间有所缩短。
必须发送一个connection:Keep-Alive
请求首部来激活keep-alive
连接
三、HTTP1.1 ——标准化的协议
HTTP/1.0的多种不同的实现运用起来有些混乱,HTTP1.1是第一个标准化版本,重点关注的是校正HTTP设计中的结构性缺陷:
连接可以重复使用,节省了多次打开它的时间,以显示嵌入到单个原始文档中的资源。
增加流水线操作,允许在第一个应答被完全发送之前发送第二个请求,以降低通信的延迟。
支持响应分块。
引入额外的缓存控制机制。
引入内容协商,包括语言,编码,或类型,并允许客户端和服务器约定以最适当的内容进行交换。
感谢 Host 头,能够使不同的域名配置在同一个IP地址的服务器。
安全性得到了提高
在http1.1中,client和server都是默认对方支持长链接的, 如果不希望使用长链接,则需要在header中指明connection:close;
四、HTTP2.0——为了更优异的表现
HTTP/2在HTTP/1.1有几处基本的不同:
- HTTP2是二进制协议而不是文本协议。不再可读和无障碍的手动创建,改善的优化技术现在可被实施。
- 这是一个复用协议。并行的请求能在同一个链接中处理,移除了HTTP/1.x中顺序和阻塞的约束。
- 压缩了headers。因为headers在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。
- 其允许服务器在客户端缓存中填充数据,通过一个叫服务器推送的机制来提前请求。
五、HTTPS
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。现在的HTTPS都是用的TLS协议,但是由于SSL出现的时间比较早,并且依旧被现在浏览器所支持,因此SSL依然是HTTPS的代名词。
HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。
首先,客户端向服务器发出加密请求
服务器用自己的私钥加密网页,并连同本身的数字证书,发送给客户端
客户端的证书管理器中有“受信任的根证书颁发机构”列表,客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内
如果数字证书记载的网址,与你正在浏览的网址不一致,说明这张证书可能被冒用,浏览器发出警告
如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告
如果证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,与服务器交换加密信息
最后建议大家也去看看《http权威指南》,虽然可能很多地方都看不懂,但是第一遍可以大致翻阅一下,对知识点有个全局了解,等实践中遇到问题之后再查看。