长连接和短连接
其实HTTP长连接和短连接的本质上是TCP的长连接和短连接。
HTTP1.0是默认短连接的,也就是说服务器和客户端的每一次HTTP操作,就建立一次连接,当任务结束,就中断了。
而在HTTP1.1默认都是长连接,响应头里面会多一个字段:Connection:keep-alive。这是用长连接时,当客户端和服务器建立连接后,并不会任务完成就立马断开,而是会有一个保持时间,连接超过这个时间了,才会去断开。在保持期间,会通过发送心跳包来保证服务器不会断开连接,心跳包就是每隔一段时间,发送一个非常简单的包过去,既不会消耗服务器大量的资源,又能保证服务器不会断开连接
长连接的好处:省去较多的TCP建立和关闭的操作,减少浪费,节约时间。但是如果客户端很多,这样短时间内非常多的客户端都和服务器保持着连接,这样服务器迟早会撑不住。
长连接用于操作频繁的点对点通讯,而且连接数不能太多。
断点续传
就是说在上传或者下载文件的时候,我们人为的将文件划分为几个部分,每个部分都采用一个线程进行上传或者下载,当网络故障恢复后,可以继续从以上传或下载的部分开始上传或下载。而不具备断点需传功能的资源,当从网络故障恢复后,就只能在从头开始。
HTTP1.1开始支持了获取文件的部分内容。断点需传的字段就是Range和Content-Range。
Range用于请求头中,用于指定第一个字节的位置和最后一个字节的位置。
Accept-Ranges用于响应头中,返回当前可接受的范围以及文件总大小。
但是在实际应用中会存在这样一种情况,在客户端发起请求时,如果URL对应的内容在服务器中已经发生了变化,这样续传下来的数据肯定是错的。。这个时候我们就需要用到我们缓存中的字段,比方说Last-Modified或者ETag,但那是在断点续传中真正的解决这个问题的字段是If-Range,他在这里面保存了Last-Codified或者ETag的值。