国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

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

2024-05-04 23:17:27
字體:
供稿:網(wǎng)友
所以根據(jù)EOF就可判斷一次請(qǐng)求的結(jié)束,下面的代碼(PHP)很常見:

復(fù)制代碼 代碼如下:


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


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

復(fù)制代碼 代碼如下:


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


2. 獲得正文

復(fù)制代碼 代碼如下:


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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阳春市| 南充市| 遂平县| 阿城市| 阿城市| 桃园市| 仁化县| 泾阳县| 丽江市| 长寿区| 原阳县| 华坪县| 页游| 本溪市| 仁怀市| 海城市| 璧山县| 丽江市| 济南市| 明光市| 新沂市| 黄大仙区| 壶关县| 西青区| 老河口市| 抚宁县| 稷山县| 志丹县| 寿光市| 库尔勒市| 于都县| 凤山县| 横山县| 玉树县| 晋州市| 象州县| 洛川县| 泸溪县| 锡林郭勒盟| 永善县| 海伦市|