>

阿里ve方式的HTTP须要的了断的实现代码,漫长连

- 编辑:澳门新葡亰平台游戏 -

阿里ve方式的HTTP须要的了断的实现代码,漫长连

HTTP Keep-Alive模式

2015/12/01 · HTML5 · 1 评论 · HTTP

原稿出处: 吴秦   

传说发生在5月份的叁次面试资历中,本来作者不想讲出去丢人显眼,不过为了警醒自个儿和劝诫子孙,小编主宰写成博文发出来。因为在面试进程中,笔者讲在2008年写过QQ农场帮手,在个中间深刻学习了HTTP公约,并且在二〇〇八-05-18写了博文:HTTP契约及其POST与GET操作差距& C#中怎么样行使POST、GET等。面试官说既然笔者精晓HTTP左券,就问“当HTTP采取keepalive方式,当客户端向服务器发生央浼之后,顾客端怎么着判别服务器的数据已经发出完毕?”

说实话,那时候自己懵了,一贯还没青睐过keepalive形式。小编只精晓:HTTP协议中型地铁户端发送一个小央浼,服务器响应以所愿意的新闻(举例三个html文件或意气风发副gif图像卡塔 尔(英语:State of Qatar)。服务器平日在发送回所央求的数码现在就倒闭连接。那样顾客端读数据时会重临EOF(-1卡塔 尔(英语:State of Qatar),就清楚数码现已接到完全了。自个儿就这么被面试官判了死罪!!!说自个儿一心停留在表面,未有深入(这时候真的十分受打击,平素自感觉本事还不易!卡塔 尔(阿拉伯语:قطر‎。作者随时确实很想找各样借口:

  • 事先未有运用HTTP的keepalive方式,所以未有深刻
  • 日久天长未有用HTTP左券,细节忘了
  • 见习的东西跟HTTP左券未有关系,用得少了就忘了
  • 。。。。。。

感觉各个解释都以那么软弱无力!笔者再也惊叹书到用的时候才认为少,也感慨系之壹人的岁月是何其的简单(曾生龙活虎度想成为八个IT专门的学业全才卡塔尔国,根本未曾活力八面见光,并且当未有当真使用三个事物的时候,往往会忽略掉比超多细节。朋友假让你也答不上去,请认真审视下文,不要怀着浮躁了的心,有可能后一次就有人问你那几个难点。

之所以听别人讲EOF就可决断壹回呼吁的了断,上边的代码(PHP)很布满:

http1.1本子以前 多数浏览器和服务器扩大了长久连接

1、什么是Keep-Alive模式?

咱俩了然HTTP合同使用“供给-应答”方式,当使用普通情势,即非KeepAlive形式时,每种要求/应答客商和服务器都要新建二个连连,完毕今后马上断开连接(HTTP公约为无连接的商事卡塔尔;当使用Keep-Alive格局(又称长久连接、连接重用卡塔尔国时,Keep-Alive功效使客户端到服务器端的连天持续有效,当现身对服务器的后继诉求时,Keep-Alive效率防止了树立也许再一次确立连接。

图片 1

http 1.0中暗中认可是停业的,要求在http头参加”Connection: Keep-Alive”,技能启用Keep-Alive;http 1.1中暗许启用Keep-Alive,纵然插足”Connection: close “,才关闭。近些日子好些个浏览器都以用http1.1协商,也正是说暗许都会倡导Keep-Alive的连年央浼了,所以是或不是能成就八个全部的Keep-Alive连接就看服务器设置景况。

复制代码 代码如下:

利用 Connection:Keep-Alive 的首部来操作 tcp 的长久连接

2、启用Keep-Alive的优点

从地方的分析来看,启用Keep-Alive情势迟早更便捷,质量越来越高。因为防止了树立/释放连接的开支。上边是RFC 2616上的总计:

    1. By opening and closing fewer TCP connections, CPU time is saved in routers and hosts (clients, servers, proxies, gateways, tunnels, or caches), and memory used for TCP protocol control blocks can be saved in hosts.
    2. HTTP requests and responses can be pipelined on a connection. Pipelining allows a client to make multiple requests without waiting for each response, allowing a single TCP connection to be used much more efficiently, with much lower elapsed time.
    3. Network congestion is reduced by reducing the number of packets caused by TCP opens, and by allowing TCP sufficient time to determine the congestion state of the network.
    4. Latency on subsequent requests is reduced since there is no time spent in TCP’s connection opening handshake.
    5. HTTP can evolve more gracefully, since errors can be reported without the penalty of closing the TCP connection. Clients using     future versions of HTTP might optimistically try a new feature, but if communicating with an older server, retry with old   semantics after an error is reported.

RFC 2616(P47卡塔尔国还建议:单客商客商端与别的服务器或代办之间的连接数不应有超越2个。一个代理与此外服务器或代码之间应当使用抢先2 * N的意气风发并发连接。那是为着巩固HTTP响合时间,制止阻塞(冗余的连年并不可能代码推行质量的升迁卡塔尔。

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

落到实处HTTP/1.0 keep-alive连接的客户端可以经过包蕴Connection: Keep-Alive首部要求将一条连接保持在开荒状态。假设服务器愿意为下一条央求将连接保持在开垦状态,就在响应中蕴藏相仿的首部(参见图4-14卡塔 尔(阿拉伯语:قطر‎。假使响应中一向不Connection: Keep-Alive首部,客商端就以为服务器不帮忙keep-alive,会在发回响应报文之后关闭连接。

3、回到大家的主题材料(即如何剖断音讯内容/长度的大小?卡塔 尔(英语:State of Qatar)

Keep-Alive方式,客商端怎样剖断央浼所得到的响应数据已经接到落成(恐怕说如何通晓服务器已经发生完了数码卡塔 尔(阿拉伯语:قطر‎?大家早已明白了,Keep-Alive形式发送玩数据HTTP服务器不会活动断开连接,全体不可能再采纳再次来到EOF(-1卡塔尔来判定(当然你分明要如此使用也不曾章程,能够想象那作用是何许的低卡塔 尔(阿拉伯语:قطر‎!上边作者介绍二种来判断格局。

(注:短连接格局是在头顶用”Connection: close”标示,长连接用”Connection: keep-alive”标示。如今HTTP/1.0私下认可使用短连接,HTTP/1.1暗中同意使用长连接。)
而长连接(也称悠久连接)方式的HTTP在殡葬完数据后服务器并再三开连接,而是留着下一遍HTTP伏乞时行使,所以长连接的受益是大名鼎鼎的,通过集体一个TCP连接来节省以往诉求时确立/断开连接的成本。而EOF是截至那个TCP连接完结(超时或出错)时才会被发送,所以大家就无法采取方面包车型地铁法子来推断叁次HTTP需要的了断了。那也是运用长连接时都会境遇的叁个难点。近些日子剖断的格局首要有两种:
(1) 根据头中的Content-Length字段。这么些字段标记了本文的尺寸,大家得以以采纳完指定长度的字符为判断甘休的依照。
(2) 在并未有Content-Length时,依据Transfer-Encoding。有个别时候服务器不或许明确正文的高低,因为正文大概是动态暴发的,所以就不会提供Content-Length了,而是接收chunk编码来一块一块地发送正文。每一种chunk块由尾部和正文两有个别构成,尾部中由三个16进制数字内定了本文的尺寸;最后由四个尺寸为0的chunk块来表示一切HTTP正文的终止。
下边小编用PHP达成了有Content-Length时的判定情势:
1. 获得Content-Length值

图片 2

3.1、使用新闻首部字段Conent-Length

故名思意,Conent-Length代表实体内容长度,顾客端(服务器卡塔尔能够依据那一个值来剖断数据是或不是抽出完结。可是借使音信中从未Conent-Length,那该怎么来剖断呢?又在怎么样意况下会未有Conent-Length呢?请继续往下看……

复制代码 代码如下:

HTTP/1.0 keep-alive事务首部的抓手进程

3.2、使用音信首部字段Transfer-Encoding

当顾客端向服务器恳求贰个静态页面也许一张图纸时,服务器能够很掌握的掌握内容大小,然后通过Content-length音信首部字段告诉客商端须要接纳多少数量。但是一旦是动态页面等时,服务器是不容许预先精通内容大小,那时候就能够使用Transfer-Encoding:chunk情势来传输数据了。即只要要生机勃勃边发生多少,风流倜傥边发放顾客端,服务器就须求使用”Transfer-Encoding: chunked”这样的不二等秘书籍来代替Content-Length。

chunk编码将数据分为一块一块的产生。Chunked编码将使用几何个Chunk串连而成,由二个标记长度为0的chunk标示停止。各种Chunk分为底部和正文两有些,尾部内容指定正文的字符总量(十二进制的数字卡塔尔国和数量单位(平日不写卡塔 尔(英语:State of Qatar),正文部分正是点名长度的实际上内容,两片段之间用回车换行(C福睿斯LF)隔离。在最后三个长短为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)

footer = *entity-header

即Chunk编码由四某些组成:1、0至多个chunk块,2、“0” CRLF,3、footer,4、CRLF.而每个chunk块由:chunk-size、chunk-ext(可选)、CRLF、chunk-data、CRLF组成。

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

Keep-Alive 选项

当使用Connection: Keep-Alive 首部时能够叠加八个Keep-Alive首部来调度 keep-alive 的一举一动

timeout max 都以响应首部发出的 分别代表 服务器希望将三番三次保持在活泼状态的光阴和服务器希望为多少个事情保持此三回九转的活泼状态,它们都以五个推测值实际不是二个答应值。

别的还足以加上放肆未经管理的形如 name[=value]的性格 重要用来确诊和调度

Connection: Keep-Alive

Keep-Alive: max=5, timeout=120

下边包车型地铁例子表示服务器最多还有可能会为别的5个工承保持三番五次的生龙活虎状态也许将空闲状态的外向接连保持两分钟

4、消息长度的下结论

实质上,上边第22中学方法都足以综合为是什么剖断http消息的分寸、音讯的多寡。RFC 2616对音讯的尺寸总计如下:叁个新闻的transfer-length(传输长度卡塔尔是指音讯中的message-body(消息体卡塔尔国的尺寸。当使用了transfer-coding(传输编码卡塔尔国,各样新闻中的message-body(音讯体卡塔 尔(英语:State of Qatar)的尺寸(transfer-length卡塔尔由以下二种状态调节(优先级由高到低卡塔尔:

  • 其余不含有音信体的音讯(如1XXX、204、304等响应新闻和任何头(HEAD,首部)央浼的响应音信卡塔 尔(英语:State of Qatar),总是由三个空行(CLSportageF卡塔尔国停止。
  • 要是现身了Transfer-Encoding头字段 并且值为非“identity”,那么transfer-length由“chunked” 传输编码定义,除非消息由于关闭连接而销声匿迹。
  • 假如现身了Content-Length头字段,它的值表示entity-length(实体长度卡塔 尔(阿拉伯语:قطر‎和transfer-length(传输长度卡塔 尔(英语:State of Qatar)。借使那五个长度的大小不相同等(i.e.设置了Transfer-Encoding头字段卡塔尔国,那么将不可能发送Content-Length头字段。并且只要同期选取了Transfer-Encoding字段和Content-Length头字段,那么必得忽视Content-Length字段。
  • 生机勃勃旦音讯使用媒体类型“multipart/byteranges”,并且transfer-length 未有其余钦点,那么这种自定界(self-delimiting卡塔 尔(阿拉伯语:قطر‎媒体类型定义transfer-length 。除非发送者知道选择者能够剖判该类型,否则不能够动用该品种。
  • 由服务器关闭连接明确新闻长度。(注意:关闭连接无法用于分明须求消息的终止,因为服务器不可能再发响应音讯给顾客端了。卡塔 尔(英语:State of Qatar)

为了同盟HTTP/1.0应用程序,HTTP/1.1的央求音讯体中必得带有一个官方的Content-Length头字段,除非知道服务器宽容HTTP/1.1。一个伸手提包涵新闻体,况兼Content-Length字段未有给定,要是不可能肯定音讯的长短,服务器应该用用400 (bad request) 来响应;或许服务器坚定不移梦想采用二个官方的Content-Length字段,用 411 (length required)来响应。

持有HTTP/1.1的选取者应用程序必得选用“chunked” transfer-coding (传输编码),由此当不可能事先知情音讯的长短,允许使用这种机制来传输音讯。音讯不应有够同一时间蕴含Content-Length头字段和non-identity transfer-coding。假如叁个消息还要包涵non-identity transfer-coding和Content-Length ,必得忽视Content-Length 。

2. 拿走正文

Keep-Alive连接的范围和法规

  1. http/1.0 中keep-alive不是私下认可使用的 顾客端必得发送叁个蕴含Connection:Keep-Alive 的伏乞首部的乞请来激活 keep-alive 连接

  2. Connection:Keep-Alive 首部必得跟随全数相当大可能率保持长久连接的报文一同发送:

假定顾客端从未发送Connection:Keep-Alive 服务器将会在伸手之后关闭连接

什么客户端发以往响应中尚无Connection:Keep-Alive首部,则足以明白服务器在爆发响应之后会停业连接

3. 保持长久连接报文实体必要求有正确Content-Length,那样事务管理技巧正确的检查实验出一条报文的告竣和另一条报文的收尾。

4. 代理和网关必须进行Connection首部的平整。代理或网关必得在将报文转载出来或将其高速缓存以前,删除在Connection首部中命名的富有首部字段以致Connection首部本身。严峻来讲,不该与不能够鲜明是或不是扶助Con-nection首部的代理服务器建设构造keep-alive连接,以幸免现身哑代理难题。

5、HTTP头字段计算

最终作者计算下HTTP合同的头顶字段。

  • 1、 Accept:告诉WEB服务器自身采纳什么介质媒质类型,*/* 表示其他项目,type/* 表示该项目下的装有子类型,type/sub-type。
  • 2、 Accept-Charset: 浏览器声明本人接纳的字符集
    Accept-Encoding: 浏览器注解自个儿吸取的编码方法,日常钦命压缩方法,是或不是帮衬压缩,援助什么压缩方法(gzip,deflate卡塔 尔(阿拉伯语:قطر‎
    Accept-Language:浏览器表明自个儿吸取的语言
    言语跟字符集的界别:中文是言语,普通话有三种字符集,比如big5,gb2312,gbk等等。
  • 3、 Accept-Ranges:WEB服务器申明本身是不是接纳获取其有个别实体的一片段(举例文件的风度翩翩部分卡塔尔的乞求。bytes:表示选用,none:表示不选拔。
  • 4、 Age:今世理服务器用自身缓存的实业去响应供给时,用该底部声明该实体从爆发到前几日因此多久了。
  • 5、 Authorization:当顾客端接纳到来自WEB服务器的 WWW-Authenticate 响适当时候,用该底部来答复自身的身份验证新闻给WEB服务器。
  • 6、 Cache-Control:诉求:no-cache(不要缓存的实业,供给现在从WEB服务器去取卡塔 尔(英语:State of Qatar)
    max-age:(只选拔 Age 值小于 max-age 值,並且未有过期的对象卡塔 尔(阿拉伯语:قطر‎
    max-stale:(可以承担过去的对象,不过过期时间必得低于 max-stale 值卡塔尔国
    min-fresh:(接收其不落俗套生命期大于其眼下 Age 跟 min-fresh 值之和的缓存对象卡塔 尔(英语:State of Qatar)
    遥相呼应:public(能够用 Cached 内容回应任何顾客)
    private(只可以用缓存内容回答先前恳请该内容的百般客商卡塔 尔(阿拉伯语:قطر‎
    no-cache(能够缓存,不过唯有在跟WEB服务器验证了其一蹴而就后,技巧回到给顾客端卡塔尔
    max-age:(本响应包括的目的的超时时间卡塔 尔(阿拉伯语:قطر‎
    ALL: no-store(不允许缓存卡塔尔
  • 7、 Connection:乞求:close(告诉WEB服务器只怕代理服务器,在完花费次诉求的响应后,断开连接,不要等待此番连接的接轨央求了卡塔 尔(阿拉伯语:قطر‎。
    keepalive(告诉WEB服务器大概代理服务器,在成功此次诉求的响应后,保持三番两次,等待本次连接的世襲央求卡塔 尔(阿拉伯语:قطر‎。
    响应:close(连接已经关闭卡塔尔国。
    keepalive(连接保持着,在等候本次连接的三回九转哀告卡塔 尔(阿拉伯语:قطر‎。
    Keep-Alive:如若浏览器须求保持再而三,则该底部阐明愿意 WEB 服务器保持延续多久(秒卡塔 尔(阿拉伯语:قطر‎。比如:Keep-Alive:300
  • 8、 Content-Encoding:WEB服务器注脚自个儿使用了什么样压缩方法(gzip,deflate卡塔尔压缩响应中的对象。比如:Content-Encoding:gzip
  • 9、Content-Language:WEB 服务器告诉浏览器自身响应的目的的语言。
  • 10、Content-Length: WEB 服务器告诉浏览器本人响应的靶子的长短。举例:Content-Length: 26012
  • 11、Content-Range: WEB 服务器评释该响应包蕴的生龙活虎对目的为全方位对象的哪位部分。举个例子:Content-Range: bytes 21010-470250%7022
  • 12、Content-Type: WEB 服务器告诉浏览器本人响应的对象的花色。举个例子:Content-Type:application/xml
  • 13、ETag:正是二个对象(举个例子UWranglerL卡塔尔国的标记值,就二个对象来讲,举例一个html 文件,假设被更改了,其 Etag 也会别订正,所以ETag 的功能跟 Last-Modified 的效用差不离,重要供 WEB 服务器剖断多个对象是或不是变动了。比如前一回号令有个别 html 文件时,获得了其 ETag,当本次又恳求那个文件时,浏览器就能够把以前到手的 ETag 值发送给WEB 服务器,然后 WEB 服务器会把这么些 ETag 跟该文件的当前 ETag 举行比较,然后就明白这几个文件有未有转移了。
  • 14、 Expired:WEB服务器评释该实体就要怎么着时候过期,对于逾期了的指标,独有在跟WEB服务器验证了其卓有成效后,才干用来响应客商诉求。是 HTTP/1.0 的底部。举个例子:Expires:Sat, 23 May 2010 10:02:12 核糖霉素T
  • 15、 Host:客商端钦命自身想拜会的WEB服务器的域名/IP 地址和端口号。举例:Host:rss.sina.com.cn
  • 16、 If-Match:尽管指标的 ETag 未有变动,其实也就意味著对象未有变动,才试行央浼的动作。
  • 17、 If-None-Match:假使指标的 ETag 校勘了,其实也就意味著对象也改成了,才实践供给的动作。
  • 18、 If-Modified-Since:倘若乞求的对象在该底部钦命的时日之后改良了,才试行央浼的动作(比方再次回到对象卡塔 尔(阿拉伯语:قطر‎,不然重返代码304,告诉浏览器该对象未有改善。比如:If-Modified-Since:Thu, 10 Apr 二零一零 09:14:42 核糖霉素T
  • 19、 If-Unmodified-Since:即使哀求的目的在该尾部钦命的时刻之后没改革过,才施行乞请的动作(比方再次回到对象卡塔尔。
  • 20、 If-Range:浏览器告诉 WEB 服务器,假若小编须求的目标未有退换,就把自身贫乏的有个别给本身,假诺目的改换了,就把全部对象给笔者。浏览器通过发送央求对象的 ETag 或然 本身所精晓的最终改善时间给 WEB 服务器,让其判别指标是否改换了。总是跟 Range 底部一齐行使。
  • 21、 Last-Modified:WEB 服务器感觉对象的最终矫正时间,比方文件的最终校正时间,动态页面包车型客车终极发生时间等等。比如:Last-Modified:Tue, 06 May 二〇〇八 02:42:43 放线菌壮观素T
  • 22、 Location:WEB 服务器告诉浏览器,试图访问的指标已经被移到其余地方了,到该尾部钦定的职务去取。比方:Location:
  • 23、 Pramga:重要使用 Pramga: no-cache,也等于 Cache-Control: no-cache。举个例子:Pragma:no-cache
  • 24、 Proxy-Authenticate: 代理服务器响应浏览器,需要其提供代理身份验证消息。Proxy-Authorization:浏览器响应代理服务器的身份验证伏乞,提供温馨之处新闻。
  • 25、 Range:浏览器(比如 Flashget 三四线程下载时卡塔 尔(英语:State of Qatar)告诉 WEB 服务器自个儿想取对象的哪风流罗曼蒂克部分。比如:Range: bytes=1173546-
  • 26、 Referer:浏览器向 WEB 服务器表明本人是从哪个 网页/UCRUISERL 得到/点击 当前恳请中的网站/U奥迪Q3L。比如:Referer:
  • 27、 Server: WEB 服务器注明本身是如何软件及版本等音讯。举个例子:Server:Apache/2.0.61 (Unix)
  • 28、 User-Agent: 浏览器注解自身的地位(是哪个种类浏览器卡塔尔国。举例:User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/二〇〇八0404 Firefox/2、0、0、14
  • 29、 Transfer-Encoding: WEB 服务器证明本身对本响应新闻体(不是音信体里面包车型大巴靶子卡塔 尔(英语:State of Qatar)作了哪些的编码,比方是或不是分块(chunked卡塔尔。举例:Transfer-Encoding: chunked
  • 30、 Vary: WEB服务器用该底部的从头到尾的经过告知 Cache 服务器,在怎么标准下才具用本响应所再次来到的指标响应后续的央浼。若是源WEB服务器在吸收接纳第多个乞请新闻时,其响应音讯的尾部为:Content-Encoding: gzip; Vary: Content-Encoding那么 Cache 服务器会解析后续央浼音讯的尾部,检查其 Accept-Encoding,是还是不是跟早先响应的 Vary 头部值生龙活虎致,便是或不是利用同大器晚成的原委编码方法,那样就能够防止 Cache 服务器用自身 Cache 里面压缩后的实体响应给不辜负有解压技艺的浏览器。举例:Vary:Accept-Encoding
  • 31、 Via: 列出从顾客端到 OCS 也许相反方向的响应经过了何等代理服务器,他们用什么协议(和本子卡塔尔发送的央浼。当客商端央浼达到第多个代理服务器时,该服务器会在协和爆发的央浼里面增加Via 尾部,并填上本人的连锁音讯,当下贰个代理服务器收到第一个代理服务器的央浼时,会在自身发生的乞求里面复制前叁个代理服务器的倡议的Via 底部,并把团结的相关音讯加到后边,由此及彼,当 OCS 收到最终一个代理服务器的伏乞时,检查 Via 底部,就驾驭该需要所经过的路由。例如:Via:1.0 236.D0707195.sina.com.cn:80 (squid/2.6.STABLE13)

===============================================================================
HTTP 需要新闻底部实例:
Host:rss.sina.com.cn
User-Agent:Mozilla/5、0 (Windows; U; Windows NT 5、1; zh-CN; rv:1、8、1、14) Gecko/20080404 Firefox/2、0、0、14
Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0、9,text/plain;q=0、8,image/png,*/*;q=0、5
Accept-Language:zh-cn,zh;q=0、5
Accept-Encoding:gzip,deflate
Accept-Charset:gb2312,utf-8;q=0、7,*;q=0、7
Keep-Alive:300
Connection:keep-alive
Cookie:userId=C5bYpXrimdmsiQmsBPnE1Vn8ZQmdWSm3WRlEB3vRwTnRtW <– Cookie
If-Modified-Since:Sun, 01 Jun 2008 12:05:30 GMT
Cache-Control:max-age=0
HTTP 响应音讯尾部实例:
Status:OK – 200 <– 响应状态码,表示 web 服务器管理的结果。
Date:Sun, 01 Jun 2008 12:35:47 GMT
Server:Apache/2、0、61 (Unix)
Last-Modified:Sun, 01 Jun 2008 12:35:30 GMT
Accept-Ranges:bytes
Content-Length:18616
Cache-Control:max-age=120
Expires:Sun, 01 Jun 2008 12:37:47 GMT
Content-Type:application/xml
Age:2
X-Cache:HIT from 236-41、D07071954、sina、com、cn <– 反向代理服务器使用的 HTTP 尾部
Via:1.0 236-41.D07071951.sina.com.cn:80 (squid/2.6.STABLE13)
Connection:close

本节摘自:

1 赞 3 收藏 1 评论

图片 3

复制代码 代码如下:

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

本文由前端php发布,转载请注明来源:阿里ve方式的HTTP须要的了断的实现代码,漫长连