problem with apachebench (ab) and transfer-encoding chunked
i am using apachebench (ab) to test a web server
this problem is similar to this question.
here is output from one request
:: ab -c 1 -n 1 -v 5 -k http://localhost:8082/typealine
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)...INFO: POST header ==
---
GET /typealine HTTP/1.0
Connection: Keep-Alive
Host: localhost:8082
User-Agent: ApacheBench/2.3
Accept: */*
---
LOG: header received:
HTTP/1.1 200 OK
set-cookie: i=101203-012359.597-197269fc4;path=/;expires=Thu,31-Dec-2020 00:00:00 GMT;
content-type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: Keep-Alive
205
<html><head><link href=/default.css rel=stylesheet><script src=/default.js></script></head><body onload=ui.onload()><form onsubmit=return(false)><center>
<div style="text-align:center;border:1px dotted blue;padding:7px"><span id=__st> ڀ </span><input value="" title="s" id=_s name=_s type=text onkeypress="return ui._cr(event,this,'_ a')" size=32 onchange="this._changed=true"> <a id=_ href="javascript:ui.ax('_ a')">ᐖ</a><script>document.getElementById('_s').focus();</script><br>
<br>
<span id=disp></span></div>
0
LOG: Response code = 200
..done
Server Software:
Server Hostname: localhost
Server Port: 8082
Document Path: /typealine
Document Length: 0 bytes
Concurrency Level: 1
Time taken for tests: 0.001 seconds
Complete requests: 1
Failed requests: 0
Write errors: 0
Keep-Alive requests: 1
Total transferred: 721 bytes
HTML transferred: 0 bytes
Requests per second: 1312.34 [#/sec] (mean)
Time per request: 0.762 [ms] (mean)
Time per request: 0.762 [ms] (mean, across all concurrent requests)
Transfer rate: 924.02 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 1 1 0.0 1 1
Waiting: 0 0 0.0 0 0
Total: 1 1 0.0 1 1
here is sample output which fails
:: ab -c 1 -n 5 -v 5 -k http://localhost:8082/typealine
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)...INFO: POST header ==
---
GET /typealine HTTP/1.0
Connection: Keep-Alive
Host: localhost:8082
User-Agent: ApacheBench/2.3
Accept: */*
---
LOG: header received:
HTTP/1.1 200 OK
set-cookie: i=101203-012711.490-1fdea5f58;path=/;expires=Thu,31-Dec-2020 00:00:00 GMT;
content-type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: Keep-Alive
205
<html><head><link href=/default.css rel=stylesheet><script src=/default.js></script></head><body onload=ui.onload()><form onsubmit=return(false)><center>
<div style="text-align:center;border:1px dotted blue;padding:7px"><span id=__st> ڀ </span><input value="" title="s" id=_s name=_s type=text onkeypress="return ui._cr(event,this,'_ a')" size=32 onchange="this._changed=true"> <a id=_ href="javascript:ui.ax('_ a')">ᐛ</a><script>document.getElementById('_s').focus();</script><br>
<br>
<span id=disp></span></div>
0
LOG: Response code = 200
LOG: header received:
HTTP/1.1 200 OK
set-cookie: i=101203-012711.490-10b9564e5;path=/;expires=Thu,31-Dec-2020 00:00:00 GMT;
content-type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: Keep-Alive
LOG: Response code = 200
LOG: header received:
205
<html><head><link href=/default.css rel=stylesheet><script src=/default.js></script></head><body onload=ui.onload()><form onsubmit=return(false)><center>
<div style="text-align:center;border:1px dotted blue;padding:7px"><span id=__st> ڀ </span><input value="" title="s" id=_s name=_s type=text onkeypress="return ui._cr(event,this,'_ a')" size=32 onchange="this._changed=true"> <a id=_ href="javascript:ui.ax('_ a')">ᐖ</a><script>document.getElementById('_s').focus();</script><br>
<br>
<span id=disp></span></div>
0
WARNING: Response code not 2xx (500)
apr_poll: The timeout specified has expired (70007)
Total of 2 requests completed
i am very keen on finding the bug in the web server or determine whether ab has problem
here is output from telnet session mimicking ab
:: telnet localhost 8082
Trying ::1...
Connected to localhost.localdomain.
Escape character is '^]'.
GET /typealine HTTP/1.0
Connection: Keep-Alive
Host: localhost:8082
User-Agent: ApacheBench/2.3
Accept: */*
HTTP/1.1 200 OK
set-cookie: i=101203-030537.389-1d3d8c1cb;path=/;expires=Thu,31-Dec-2020 00:00:00 GMT;
content-type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: Keep-Alive
205
<html><head><link href=/default.css rel=stylesheet><script src=/default.js></script></head><body onload=ui.onload()><form onsubmit=return(false)><center>
<div style="text-align:center;border:1px dotted blue;padding:7px"><span id=__st> ڀ </span><input value="" title="s" id=_s name=_s type=text onkeypress="return ui._cr(event,this,'_ a')" size=32 onchange="this._changed=true"> <a id=_ href="javascript:ui.ax('_ a')">ᐖ</a><script>document.getElementById('_s').focus();</script><br>
<br>
<span id=disp></span></div>
0
GET /typealine HTTP/1.0
Connection: Keep-Alive
Host: localhost:8082
User-Agent: ApacheBench/2.3
Accept: */*
HTTP/1.1 200 OK
set-cookie: i=101203-030539.162-1d8b8c256;path=/;expires=Thu,31-Dec-2020 00:00:00 GMT;
content-type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: Keep-Alive
205
<html><head><link href=/default.css rel=stylesheet><script src=/default.js></script>&l开发者_运维百科t;/head><body onload=ui.onload()><form onsubmit=return(false)><center>
<div style="text-align:center;border:1px dotted blue;padding:7px"><span id=__st> ڀ </span><input value="" title="s" id=_s name=_s type=text onkeypress="return ui._cr(event,this,'_ a')" size=32 onchange="this._changed=true"> <a id=_ href="javascript:ui.ax('_ a')">ᐖ</a><script>document.getElementById('_s').focus();</script><br>
<br>
<span id=disp></span></div>
0
GET /typealine HTTP/1.0
Connection: Keep-Alive
Host: localhost:8082
User-Agent: ApacheBench/2.3
Accept: */*
HTTP/1.1 200 OK
set-cookie: i=101203-030541.086-18be1706b;path=/;expires=Thu,31-Dec-2020 00:00:00 GMT;
content-type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: Keep-Alive
205
<html><head><link href=/default.css rel=stylesheet><script src=/default.js></script></head><body onload=ui.onload()><form onsubmit=return(false)><center>
<div style="text-align:center;border:1px dotted blue;padding:7px"><span id=__st> ڀ </span><input value="" title="s" id=_s name=_s type=text onkeypress="return ui._cr(event,this,'_ a')" size=32 onchange="this._changed=true"> <a id=_ href="javascript:ui.ax('_ a')">ᐛ</a><script>document.getElementById('_s').focus();</script><br>
<br>
<span id=disp></span></div>
0
So the problem is that the spec calls for a 0 CRLF CRLF as the end marker of chunked transfer-encoding. ab is broken because it wants 0 and CRLF.
From that output it looks like there's an extra CRLF after the headers of the second response, whereas ab
would expect to see the chunk length.
精彩评论