Java实现HTTP:回应数据包头格式详解

本节我们看看服务器返回给客户端的数据包头有什么特点。在HTTP1.1中有9种数据包头字段需要了解和掌握。第一个叫Accept-Ranges,他告诉客户端服务器是否处理了包含Range请求的请求数据包。该字段以Accept-Range: bytes的形式出现,在客户端向服务器提交数据时,它可能只提交从某个位置起的部分数据,这些数据在请求数据包中以Range字段来标明,如果服务器支持这种局部数据上传模式,那么他就会返回Accept-Range: x bytes表示成功接收客户端发来的数据,如果不支持它就会以Accept-Range:none的形式告知客户端。

第二个字段叫Age,它用于告知客户端当前接收的资源的创建时长。第三个字段是ETag,各个字段可以让客户端和服务器形成某种特殊交互,后面我们再对该字段的使用进行进一步分析。第四个字段叫Location,该字段包含一个URL,它是服务器告诉客户端通过给定的URL去获取它想要的资源,该字段常用与重定向数据包中,重定向对应的回复码是301,302,或307.第五个字段为Proxy_Authenticate,代理服务器返回给设备的回复数据包中会使用该字段,它要求客户端执行特定的认证操作。第七个字段是Retry-After,该字段是服务器用于告诉客户端它的请求没有成功执行,要求客户端在一段时间后再重试。第八个字段为Server,该字段用于告知客户端服务器的相关信息,例如服务器当前运行的程序版本等。第九个字段为WWW-Authenticate,它经常包含在服务器返回的401回复包里,它表示客户端没有认证通过,客户端需要使用该字段包含的数据进行特定认证后才能再次向服务器发出请求。

最后我们看HTTP协议中有点令人莫名其妙的实体包头。实体包头所包含的信息往往用于描述被传输的资源或数据,例如它会提供资源的类型,如果资源是图片,那么它会描述图片的格式,如果资源是字符串或数据,它会提供编码方式,这样接收者收到资源后才能知道如何处理接收到的数据。实体包头经常出现在回复数据包中,但如果客户端使用PUT或POST向服务器传输数据时,它也会包含在请求数据包里。当客户端使用HEAD请求时,服务器回复的数据包中会包含大量实体包头以便将资源的各种信息或属性告诉客户端。

我们看常用的几种实体包头。1.Allow 它列举所有可用于给定资源的方法,例如GET,HEAD,PUT等,通常情况下服务器会返回405(Method Not Allowed)回复包,当客户端拿到这个数据包时,通过该包头就可以知道通过什么方法去获取给定资源。2,Content-Encoding,该包头告诉客户端资源如何被编码,如果客户端请求的是字符串文件,那么通常情况下会使用base-64编码,该包头就会包含对应信息。于是客户端拿到数据后就知道用什么方法进行解码。3,Content-Language,它包含了所传输数据所使用的自然语言,这个包头主要用于客户端在展示资源时提供便利,例如来自德国的音频文件就可以将标志符"de"包含在包头里,这样客户端就知道音频播放后是德国语言。

4,Content-Length, 该包头用于标志资源的长度,该包头信息对客户端非常重要,客户端根据该包头的信息才能知道何时才能接收完所有数据。但并不是所有数据都能有固定长度,例如直播的视频数据就不会有固定长度,关于传输数据长度的计算在后续章节会详细研究。5,Content-Location,该包头标明了资源所在的位置,它通常包含资源对应的URL,当客户端所要求的资源被存放在多个地方时,该包头才会出现在回复数据包中。6,Content-Range,当返回的数据包只包含了客户端所请求资源的某一部分时,该包头必须包含在数据包里。例如当客户端向服务器请求一个大型文件时,文件数据不可能一下子全部包含在一个数据包里,必须分成多个部分多次发送,该包头显示当前数据包发送的数据属于全部数据的哪一部分,同时它还包含了数据的总大小。例如客户端请求一个包含2000字节的文件,第一个数据包包含了前1200字节,那么该包头的形式为”0-1199/2000"。

7,Content-Type,它用于表明资源的类型,例如资源是音频还是视频,该包头需要在后续章节中详细讲解。8,Expires,该包头包含了资源的过期时间,如果客户端是代理服务器,那么当它缓存的资源过了给定过期时长后,它必须再次向服务器请求资源,该包头会包含"max-age"字段用于表明过期时间。9,Last-Modified,该包头告诉客户端服务器最近一次对资源进行修改的时间,如果客户端上次已经从服务器下载了一个超大文件,那么客户端会使用HEAD请求获得该包头从而知道数据是否被修改过,通过该包头得知数据上传被修改的时间以便决定是否再次向服务器下载该数据。

下一节我们将看看如何用代码来实现POST请求。

更详细的讲解和代码调试演示过程,请点击链接

更多技术信息,包括操作系统,编译器,面试算法,机器学习,人工智能,请关照我的公众号:
这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章