Transfer-Encoding: chunked 的含义
在用firebug查看服务器的请求时,返回的header都有Transfer-Encoding: chunked,在做实际应用时,好像也
没有多大关系。
试试用socket连接http服务器,看看数据是如何传输的。
用tomcat做服务器,建立一个a.jsp文件
输出结果是:
[quote]
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
[/quote]
其中Transfer-Encoding:chunked表示内容长度在后面介绍,b这个16进制数字就表示长度为11,然后是内容
(helloworld!),然后以\r\n结束,如果有下一段,则一个16进制数字表示长度,直到最后一段没有了,才以0
结束。
不过不用担心,在浏览器里会自动解释分析,不会让你看到b,3,0,就算在firebug里也显示的是helloworld!
123。
如果自己解析,就需要注意了。
在用firebug查看服务器的请求时,返回的header都有Transfer-Encoding: chunked,在做实际应用时,好像也
没有多大关系。
试试用socket连接http服务器,看看数据是如何传输的。
Socket s = new Socket("172.16.1.123", 80);
InputStream ins = s.getInputStream();
OutputStream os = s.getOutputStream();
os.write("GET /a.jsp HTTP/1.1\r\n".getBytes());
os.write("Host:172.16.1.123\r\n".getBytes());
//必须加host,否则服务器会返回bad request,无论是tomcat还是resin,还是nginx或者apache httpd
os.write("\r\n\r\n".getBytes());//这个也必不可少,http协议规定的
os.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(ins));
String line = null;
line = br.readLine();
while(line != null){
System.out.println(line);
line = br.readLine();
}
ins.close();
用tomcat做服务器,建立一个a.jsp文件
<% out.print("helloworld!");
out.flush();
out.print("123");
out.flush();
%>
输出结果是:
[quote]
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
[/quote]
其中Transfer-Encoding:chunked表示内容长度在后面介绍,b这个16进制数字就表示长度为11,然后是内容
(helloworld!),然后以\r\n结束,如果有下一段,则一个16进制数字表示长度,直到最后一段没有了,才以0
结束。
不过不用担心,在浏览器里会自动解释分析,不会让你看到b,3,0,就算在firebug里也显示的是helloworld!
123。
如果自己解析,就需要注意了。