HTTP Header(协议头)与Keep-Alive模式详解
2012-07-12 14:08:04   来源:我爱运维网   评论:0 点击:

1、什么是Keep-Alive模式?我们知道HTTP协议采用请求-应答模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建...


3、判断请求返回内容/长度的大小

Keep-Alive模式,客户端如何判断请求所得到的响应数据已经接收完成(或者说如何知道服务器已经发生完了数据)?
我们知道,Keep-Alive模式发送完数据HTTP服务器不会自动断开连接,所有不能使用返回EOF(-1)来判断!下面介绍两种来判断方法。

3.1、使用HTTP响应头部字段Conent-Length

HTTP响应头部字段Conent-Length表示实体内容长度,客户端(服务器)可以根据这个值来判断数据是否接收完成。但是若响应部部中没有Conent-Length,该如何来判断呢?在什么情况下会没有Conent-Length?下面会介绍。

3.2、使用HTTP响应头部字段Transfer-Encoding

当客户端向服务器请求一个静态页面或者一张图片时,服务器可以很清楚的知道内容大小,然后通过Content-length这个HTTP头部字段告诉客户端需要接收多少数据。但是若是动态网页时,服务器不可能预先知道内容大小,这时就可使用Transfer-Encoding:chunk模式来传输数据,即:一边产生数据,一边发给客户端,服务器需使用"Transfer-Encoding: chunked"的模式来代替Content-Length。

chunked编码将数据分成一块一块的发送。Chunked编码由若干个Chunk串连而成,使用一个标明长度为0 的chunk标示结束。每个Chunk分为头部和正文两部分,头部内容指定正文的字符总数(十六进制的数字 )和数量单位(一般不写),正文部分是指定长度的实际内容,两部分之间用回车换行(CRLF) 隔开。在最后一个长度为0的Chunk中的内容是称为footer的内容,包含一些附加的Header信息(通常可以直接忽略)。

Chunk编码的格式如下:

Chunked-Body = *chunk 
                                    "0" CRLF 
                                    footer 
                                    CRLF  
chunk = chunk-size [ chunk-ext ] CRLF 
                  chunk-data CRLF

hex-no-zero = <HEX excluding "0">

chunk-size = hex-no-zero *HEX 
chunk-ext = *( ";" chunk-ext-name [ "=" chunk-ext-value ] ) 
chunk-ext-name = token 
chunk-ext-val = token | quoted-string 
chunk-data = chunk-size(OCTET)

相关热词搜索:HTTP Header 协议头 Keep-Alive

上一篇:使用Nginx自动裁剪图片
下一篇:静态图片优化技术研究

分享到: 收藏
iTechClub广告