HTTP的实体数据

  1.   数据类型表示实体数据的内容是什么,使用的是MIME    type,相关的头字段是Accept和Content-Type;
    1.  text:即文本格式的可读数据,我们最熟悉的应该就是text/html了,表示超文本文档,此外还有纯文本 text/plain、样式表text/css等。
    2.   image:即图像文件,有image/gif、image/jpeg、image/png等。 
    3. audio/video:音频和视频数据,例如audio/mpeg、video/mp4等。
    4. application:数据格式不固定,可能是文本也可能是二进制,必须由上层应用程序来解释。常见的有 application/json,application/javascript、application/pdf等,另外,如果实在是不知道数据是什么类 型,像刚才说的“黑盒”,就会是application/octet-stream,即不透明的二进制数据。
  2. 数据编码表示实体数据的压缩方式,相关的头字段是Accept-Encoding和Content-Encoding;
    1.   gzip:GNU    zip压缩格式,也是互联网上最流行的压缩格式;
    2.   deflate:zlib(deflate)压缩格式,流行程度仅次于gzip;
    3.    br:一种专门为HTTP优化的新压缩算法(Brotli)。
  3. 语言类型表示实体数据的自然语言,相关的头字段是Accept-Language和Content-Language; 
  4. 字符集表示实体数据的编码方式,相关的头字段是Accept-Charset和Content-Type;
  5.   客户端需要在请求头里使用Accept等头字段与服务器进行“内容协商”,要求服务器返回最合适的数 据;
  6. Accept等头字段可以用“,”顺序列出多个可能的选项,还可以用“;q=”参数来精确指定权重。
  7. 服务器收到Range字段后,需要做四件事。
    1. 它必须检查范围是否合法,比如文件只有100个字节,但请求“200-300”,这就是范围越界了。服 务器就会返回状态码416,意思是“你的范围请求有误,我无法处理,请再检查一下”。
    2. 如果范围正确,服务器就可以根据Range头计算偏移量,读取文件的片段了,返回状态码“206  Partial    Content Partial    Content”,和200的意思差不多,但表示body只是原数据的一部分。
    3. 服务器要添加一个响应头字段Content-Range ,告诉片段的实际偏移量和资源的总大小,格式 是“bytes    x-y/length bytes    x-y/length”,与Range头区别在没有“=”,范围后多了总长度。例如,对于“0-10”的范围请 求,值就是“bytes    0-10/100”。
    4. 最后剩下的就是发送数据了,直接把片段用TCP发给客户端,一个范围请求就算是处理完了。
  8. 压缩HTML等文本文件是传输大文件最基本的方法; 
  9. 分块传输可以流式收发数据,节约内存和带宽,使用响应头字段“Transfer-Encoding:    chunked”来表 示,分块的格式是16进制长度头+数据块;
  10.   范围请求可以只获取部分数据,即“分块请求”,实现视频拖拽或者断点续传,使用请求头字 段“Range”和响应头字段“Content-Range”,响应状态码必须是206;
  11. 也可以一次请求多个范围,这时候响应报文的数据类型是“multipart/byteranges”,body里的多个部分 会用boundary字符串分隔。
 
posted @ 2020-07-12 23:57  浪波激泥  阅读(126)  评论(0编辑  收藏  举报