HTTP报文中的HTTP信息HTTP通信过程包括客户端向服务器发送请求和服务器返回客户端的响应。1.HTTP消息用于HTTP协议交互的信息称为HTTP消息。请求端(客户端)的HTTP报文称为请求报文,响应端(服务器)的HTTP报文称为响应报文。HTTP消息本身是一个字符串文字,由多行数据(以CR+LF作为换行符)组成。一条HTTP消息大致可以分为两部分:消息头和消息体。两者由最初出现的null(CR+LF)区分。通常,不需要消息正文。HTTP消息结构:2.请求消息和响应消息结构请求消息和响应消息结构:请求消息和响应消息结构示例:请求行:包含请求方法、请求URI和HTTP版本。状态行包含指示响应结果的状态代码、原因短语和HTTP版本。标头字段包含表示请求和响应的各种条件和属性的各种标头。header一般有4种类型,分别是:generalheader,requestheader,responseheader,entityheader。其他可能包括未在HTTPRFC中定义的标头(Cookie等)。3、编码提高传输速率在传输数据时,HTTP可以直接将数据原样传输,但也可以在传输过程中通过编码来提高传输速率。通过即时编码,可以有效地处理大量访问请求。但是编码操作需要电脑来完成,所以会消耗更多的CPU等资源。1、消息体和实体体的区别:消息(message):是HTTP通信中的基本单位,由八位字节序列组成(octet为8位),通过HTTP通信进行传输。实体作为请求或响应有效载荷数据(补充项)传输,其内容由实体标头和实体主体组成。HTTP消息的主体用于传输请求或响应的实体主体。通常,消息体等于实体体。只有在传输过程中进行了编码操作时,实体主体的内容才会发生变化,导致其与消息主体不同。2.压缩传输的内容编码在发送邮件中添加附件时,为了减小邮件体积,我们会先使用ZIP压缩文件,然后添加附件发送。HTTP协议的一项称为内容编码的功能可以做类似的事情。内容编码规定了实体内容所采用的编码格式,并保持实体信息的压缩状态。内容编码实体由客户端接收并负责对其进行解码。常用的内容编码如下。gzip(GNUzip)compress(UNIX系统的标准压缩)deflate(zlib)identity(无编码)3.splitandsendchunkedtransferencoding在HTTP通信过程中,在传输所有请求的编码实体资源之前,浏览服务器无法显示请求的页面。在传输大容量数据时,通过将数据分成多个块,浏览器可以逐步显示页面。这种对实体主体进行分块的能力称为分块传输编码。图例:分块传输编码将实体主体分成多个部分(块)。每个区块会以十六进制标示区块大小,实体主体的最后一个区块会标示“0(CR+LF)”。4.发送各种数据的多部分对象集合发送电子邮件时,我们可以在电子邮件中写入文本并添加多个附件。这是因为采用了MIME(MultipurposeInternetMailExtensions,多用途互联网邮件扩展)机制,使得邮件可以处理文本、图片、视频等多种不同类型的数据。例如,图片等二进制数据以ASCII码字符串编码的方式指定,即使用MIME来描述标签数据的类型。在MIME扩展中,使用了一种称为多部分对象集合(Multipart)的方法来容纳不同类型数据的多个副本。相应地,HTTP协议也采用了多部分对象集合,一个发送的消息体可以包含多种类型的实体。通常在上传图片或文本文件时使用。多部分对象集合中包含的对象如下。multipart/form-data在上传网页表单文件时使用。multipart/byteranges状态码206(PartialContent,部分内容)在响应消息包含多个范围的内容时使用。在HTTP消息中使用多部分对象集合时,需要将Content-type添加到标头字段中。使用边界字符串来划分由多部分对象集合指定的各种实体。在边界字符串(eg:-AaB03x,--THIS_STRING_SEPARATES)指定的每个实体的起始行前插入“--”标签,并在多部分对象集合对应的字符串末尾插入“--”标签(例如:--AaB03x--、-THIS_STRING_SEPARATES--)作为结尾。多部分对象集合的每个部分类型都可以包含标题字段。此外,可以在一个部分中嵌套多部分对象集合。有关多部分对象集合的更详细说明,请参阅RFC2046。5.获取部分内容的范围请求要实现该功能,需要指定下载实体的范围。这样,以指定范围发送的请求称为范围请求。插图:说明:对于范围请求,响应将返回状态码为206PartialContent的响应消息。另外,对于有多个range的range请求,response会在header字段ContentType表示multipart/byteranges后返回响应信息。如果服务器端无法响应范围请求,则会返回状态码200OK和完整的实体内容。6.内容协商返回最合适的内容问题:同一个网站上可能有多个页面内容相同。例如,英文版和中文版的网页内容相同,但使用的语言不同。定义:当浏览器的默认语言为英文或中文时,访问具有相同URI的网页时,将显示对应的英文或中文版本的网页。这样的机制称为内容协商(ContentNegotiation)图:请求消息中包含的某些头字段(下)是判断的依据。AcceptAccept-CharsetAccept-EncodingAccept-LanguageContent-Language内容协商技术有以下3种。服务器驱动协商(Server-drivenNegotiation)内容协商由服务器端进行。它是在服务器端通过引用请求的头部字段自动处理的。但是,对于用户来说,以浏览器发送的信息作为判断依据,未必能筛选出最优的内容。客户端驱动协商(Agent-drivenNegotiation)客户端进行内容协商的方式。用户从浏览器显示的可用选项列表中手动选择。也可以使用JavaScript脚本在网页上自动进行上述选择。例如,根据操作系统或浏览器的类型,自行切换到PC版页面或移动版页面。TransparentNegotiation是server-driven和client-driven的结合,是server和client之间进行内容协商的一种方法。
