当前位置: 代码迷 >> Web前端 >> Transfer-Encoding: chunked 的含意
  详细解决方案

Transfer-Encoding: chunked 的含意

热度:679   发布时间:2012-10-18 13:46:55.0
Transfer-Encoding: chunked 的含义

Transfer-Encoding: chunked 的含义


在用firebug查看服务器的请求时,返回的header都有Transfer-Encoding: chunked,在做实际应用时,好像也

没有多大关系。

试试用socket连接http服务器,看看数据是如何传输的。

Java代码 ?收藏代码
  1. Socket?s?=? new ?Socket( "172.16.1.123" ,? 80 );??
  2. InputStream?ins?=?s.getInputStream();??
  3. OutputStream?os?=?s.getOutputStream();??
  4. os.write("GET?/a.jsp?HTTP/1.1\r\n" .getBytes());??
  5. os.write("Host:172.16.1.123\r\n" .getBytes());??
  6. //必须加host,否则服务器会返回bad?request,无论是tomcat还是resin,还是nginx或者apache?httpd ??
  7. os.write("\r\n\r\n" .getBytes()); //这个也必不可少,http协议规定的 ??
  8. os.flush();??
  9. BufferedReader?br?=?new ?BufferedReader( new ?InputStreamReader(ins));??
  10. String?line?=?null ;??
  11. line?=?br.readLine();??
  12. while (line?!=? null ){??
  13. ????System.out.println(line);??
  14. ????line?=?br.readLine();??
  15. }??
  16. ins.close();??



用tomcat做服务器,建立一个a.jsp文件

Java代码 ?收藏代码
  1. <%??????out.print( "helloworld!" );??
  2. ????out.flush();??
  3. ????out.print("123" );??
  4. ????out.flush();??
  5. %>??


输出结果是:

引用

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=8A7461DDA53B4C4DD0E89D73219CB5F8; Path=/
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 10 Nov 2010 07:10:05 GMT

b
helloworld!
3
123
0



其中Transfer-Encoding:chunked表示内容长度在后面介绍,b这个16进制数字就表示长度为11,然后是内容

(helloworld!),然后以\r\n结束,如果有下一段,则一个16进制数字表示长度,直到最后一段没有了,才以0

结束。

不过不用担心,在浏览器里会自动解释分析,不会让你看到b,3,0,就算在firebug里也显示的是helloworld!

123。

如果自己解析,就需要注意了。

  相关解决方案