如何在HTTP文件服务器上正确处理客户端"连接:关闭"请求?

Jon*_*ona 3 java http

如何正确处理客户Connection: close请求字段?截至目前,如果我得到这个特定字段,我关闭套接字并等待来自客户端的后续请求,而不是再次回复并开始提供数据.

我不知道为什么我的客户端/服务器通信不能像我测试的Apache服务器一样工作.

谢谢你的任何澄清......

客户端/服务器通信:

CLIENT:
HEAD /stream.mpeg HTTP/1.0
Host: 127.0.0.1
User-Agent: SuperPlayer
Connection: Close

SERVER:
HTTP/1.0 200 OK 
Date: Wed, 1 Jun 2011 20:05:13 GMT
Server: HTTP Server
Last-Modified: Mon, 06 Aug 2009 01:02:23 GMT
Accept-Ranges: bytes
Connection: Close
Content-Type: audio/mpeg

CLIENT:
HEAD /stream.mpeg HTTP/1.0
Host: 127.0.0.1
User-Agent: SuperPlayer
Connection: Close

SERVER:
HTTP/1.0 200 OK 
Date: Wed, 1 Jun 2011 20:05:13 GMT
Server: HTTP Server
Last-Modified: Mon, 06 Aug 2009 01:02:23 GMT
Accept-Ranges: bytes
Connection: Close
Content-Type: audio/mpeg

231489172304981723409817234981234acvass123412323
21312hjdfaoi8w34yorhadl4hi8rali45mhalo3i,wmotw
345fqw354aoicu43yocq2i3hr
Run Code Online (Sandbox Code Playgroud)

客户端/ ApacheServer通信:

CLIENT:
GET /test.mp3 HTTP/1.0
Host: 192.168.1.120
User-Agent: SuperPlayer
Connection: Close

SERVER:
HTTP/1.1 200 OK
Date: Wed, 01 Jun 2011 19:15:11 GMT
Server: Apache/2.2.16 (Win32)
Last-Modified: Thu, 29 Apr 2010 21:06:34 GMT
ETag: "14000000047049-4f75c8-4856680636a80"
Accept-Ranges: bytes
Content-Length: 5207496
Connection: close
Content-Type: audio/mpeg

...d.....<).0.. ..........<.@.. ( .h.$.J...1...i....A. ......c....a.9..!g.N...A. ........ ....>......|.......8....a......|..|N.............'>........?...C.....@..TJt.n .e...r.iL..#..IH...pR|.
Run Code Online (Sandbox Code Playgroud)

AJ.*_*AJ. 5

是关闭套接字是正确的行动.如果客户端正确使用此标头,则一旦收到您的响应,它们就会关闭它们的套接字.

我在这里注意到的是你的服务器没有返回Content-Length标题.即使客户端根据W3C提议(第9.4节)发出HEAD请求:

响应HEAD请求的HTTP头中包含的元信息应该与响应GET请求时发送的信息相同.该方法可用于获得关于请求所暗示的实体的元信息,而无需转移实体主体本身.此方法通常用于测试超文本链接的有效性,可访问性和最近的修改.

对于HEAD请求的响应可以是可缓存的,因为响应中包含的信息可以用于从该资源更新先前缓存的实体.如果新的字段值指示缓存的实体从当前实体的不同(如将在内容长度,内容,MD5,ETag的或上次修改的变化来表示),那么缓存必须把缓存条目为陈旧.

这里的关键是确保在不实际发送数据的情况下告诉客户端响应的大小.