HTTP

HTTP 知识量:10 - 42 - 186

3.3 HTTP机制><

多部分对象集合- 3.3.1 -

MIME(多用途因特网邮件扩展)机制允许邮件处理文本、图片、视频等多个不同类型的数据。在扩展中会使用一种称为多部分对象集合的方法来容纳多份不同类型的数据。

HTTP协议中也采用了多部分对象集合,发送的一份报文内可含有多类型实体。

多部分对象集合包含的对象有:

  • multipart/form-data:在Web表单文件上传时使用。

  • multipart/byteranges:状态码206(部分内容)响应报文包含了多个范围的内容时使用。

在HTTP报文中,使用多部分对象集合时需要在首部字段上加上Content-type。

使用boundary字符串来划分多部分对象集合指明的各类实体,在boundary字符串指定的各个实体的起始行之前插入“--”标记,而在多部分对象集合对应的字符串的最后插入“--”标记作为结束。例如:

HTTP/1.1 206 Partial Content
...
Content-Type: multipart/byteranges; boundary=THIS_STRING_SEPARATES
-- THIS_STRING_SEPARATES
Content-Type:application/pdf
Content-Range:bytes 500-999/8000
...(指定范围内的数据)
-- THIS_STRING_SEPARATES--

多部分对象集合的每个部分类型中都可以含有首部字段,也可以在某个部分中嵌套使用多部分对象集合。

获取部分内容- 3.3.2 -

过去,如果下载文件过程中遇到网络中断,那就必须重新开始。为了解决这一问题需要一种恢复机制,也就是能从之前下载中断的地方恢复下载。

如果要实现该功能,就需要指定下载的实体范围。指定范围发送的请求叫做范围请求。例如:对于一份10000字节大小的资源,如果使用范围请求,可以只请求5001到10000字节内的资源。

使用范围请求时,会用到首部字段Range来指定资源的bytes范围。 bytes范围的指定形式如下:

Range: bytes=5001-10000      (表示5001~10000字节)
Range: bytes=5001-           (表示从5001字节之后全部的)
Range: bytes=-2000,5000-8000 (表示从一开始到2000字节和5000~8000字节的多重范围)

对于范围请求,响应会返回状态码为206的响应报文。对于多重范围的范围请求,响应会在首部字段Content-Type标明multipart/byteranges后返回响应报文。如果服务器端无法响应范围请求,则会返回状态码200 OK和完整的实体内容。

内容协商- 3.3.3 -

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最合适的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。

包含在请求报文中的某些首部字段就是判断的基准,这些首部字段主要有以下几种:

  • Accept

  • Accept-Charset

  • Accept-Encoding

  • Accept-Language

  • Content-Language

内容协商技术有以下3种类型:

1、服务器驱动协商。由服务器端进行内容协商,以请求的首部字段为参考,在服务器端自动处理。对于用户来说,以浏览器发送的信息作为判断依据,并不一定能筛选出最优内容。

2、客户端驱动协商。由客户端进行内容协商的方式。用户从浏览器显示的可选项列表中,手动选择,还可以利用JavaScript脚本在web页面上自动进行上述选择。例如:按操作系统的类型或浏览器类型自行切换成PC版页面或手机版页面。

3、透明协商。是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法。