最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

判斷Keep-Alive模式的HTTP請求的結(jié)束的實現(xiàn)代碼

 更新時間:2011年08月06日 23:18:18   作者:  
在使用短連接方式時,每個HTTP請求對應(yīng)一個TCP連接,請求完成后連接立即斷開,服務(wù)器返回EOF。
所以根據(jù)EOF就可判斷一次請求的結(jié)束,下面的代碼(PHP)很常見:
復制代碼 代碼如下:

// $fp是由fsockopen()產(chǎn)生的句柄
while(!feof($fp)) {
echo fgets($fp);
}

(注:短連接模式是在頭部用”Connection: close”標示,長連接用”Connection: keep-alive”標示。目前HTTP/1.0默認使用短連接,HTTP/1.1默認使用長連接。)
而長連接(也稱持久連接)模式的HTTP在發(fā)送完數(shù)據(jù)后服務(wù)器并不斷開連接,而是留著下一次HTTP請求時使用,所以長連接的好處是顯而易見的,通過共用一個TCP連接來節(jié)省以后請求時建立/斷開連接的開銷。而EOF是直到這個TCP連接結(jié)束(超時或出錯)時才會被發(fā)送,所以我們就不能使用上面的辦法來判斷一次HTTP請求的結(jié)束了。這也是使用長連接時都會遇到的一個問題。目前判斷的方法主要有兩種:
(1) 根據(jù)頭中的Content-Length字段。這個字段標明了正文的長度,我們可以以接收完指定長度的字符為判斷結(jié)束的依據(jù)。
(2) 在沒有Content-Length時,根據(jù)Transfer-Encoding。有些時候服務(wù)器無法確定正文的大小,因為正文可能是動態(tài)產(chǎn)生的,所以就不會提供Content-Length了,而是采用chunk編碼來一塊一塊地發(fā)送正文。每個chunk塊由頭部和正文兩部分組成,頭部中由一個16進制數(shù)字指定了正文的長度;最后由一個長度為0的chunk塊來表示整個HTTP正文的結(jié)束。
下面我用PHP實現(xiàn)了有Content-Length時的判斷方式:
1. 獲得Content-Length值
復制代碼 代碼如下:

$length = 0;
$line = '';
while($line !== "\r\n") {
$line = fgets($fp);
if(substr($line, 0, 15) === 'Content-Length:') {
$length = intval(substr($line, 16));
}
}

2. 獲得正文
復制代碼 代碼如下:

$sum = 0;
while($sum < $length) {
$line = fgets($fp);
$sum += strlen($line);
echo $line;
}

相關(guān)文章

最新評論

疏勒县| 紫阳县| 扎兰屯市| 饶平县| 新竹市| 楚雄市| 张北县| 孙吴县| 余江县| 花垣县| 永丰县| 商丘市| 芜湖县| 祁连县| 登封市| 营口市| 神池县| 伊吾县| 菏泽市| 文化| 漾濞| 五河县| 唐河县| 滦平县| 满洲里市| 罗山县| 永定县| 洛南县| 新田县| 肇源县| 定西市| 图们市| 长泰县| 吉首市| 五大连池市| 湘乡市| 尼勒克县| 东莞市| 井冈山市| 大安市| 洪湖市|