4·8HTTP内容协商机制|4·9HTTP的断电续传与多线程下载
内容协商机制
指定客户端和服务端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源。
内容协商会以响应资源的语言,字符集,编码方式等作为判断的基准。
客户端驱动
客户端发起请求,服务器发送可选项列表,客户端做出选择后在发送第二次请求
服务器驱动
服务器检测客户端的请求头部集并决定提供那个版本的页面
透明协商
某个中间设备(通常是缓存代理)代表客户端进行协商
服务器驱动内容协商-请求首部集
Accept:告知服务器发送何种媒体类型
Accept-Language:告知服务器发送何种语言
Accept-Charset:告知服务器发送何种字符集
Accept-Encoding:告知服务器采用何种编码
断电续传和多线程下载
端点续传?多线程下载?
HTTP是通过在Header里面两个参数实现的,客户端发送请求时对应的时Range,服务端响应时对应的是Content-Range。
Range
用于请求头中,指定第一个字节的位置和最后一个字节的位置
一般格式:
Range:(unit = first byte pos)- 【last byte pos】
Range
Range:bytes=0-499
Range:bytes=500-999
Range:bytes= -500
Range:bytes=500-
Range:bytes=500-600,601-999
Content-Range
用于响应头中,在发出带 Range的请求后,服务器会在Content- Range头部返回当前接受的范围和文件总大小。
一般格式:
Content-Range:bytes(unit first byte pos)-【last byte pos】/【entity legth】
Content-Range
而在响应完后,返回的响应头内容也不同:
Http/1,1 200 Ok(不使用端点续传方式)
Http/1.1 206 Partial Contenet(使用端点续传方式)
端点续传的过程
客户端下载一个1024K的文件,已经下载了其中512K。
网络中断,客户端请求续传,因此需要在HTTP头中申明本次需要续传的片段: Range: bytes=512000这个头通知服务端从文件的512K位置开始传输文件
服务端收到断点续传请求,从文件的512K位置开始传输,并且在HTTP头中增加:
Content-range: bytes 512000-/1024000
并且此时服务端返回的HTTP状态码应该是206,而不是200。