The only way it can be so long is if you're disconnecting between requests. Not sure if you have a Connection: close header from the server or if the keepalive setting is being respected by vibe.d. Maybe you could enable vibe logs using import vibe.core.log; setLogLevel(LogLevel.trace); to see if there's a disconnect between requests.

I ran the program with --vvvv and I got this for each request:

[6806809C:6807399C trc] returning HTTPClient connection 0 of 1
[6806809C:6807399C trc] --------------------
[6806809C:6807399C trc] HTTP client request:
[6806809C:6807399C trc] --------------------
[6806809C:6807399C trc] GET <path goes here> HTTP/1.1
[6806809C:6807399C trc] User-Agent: vibe.d/0.7.23 (HTTPClient, +http://vibed.org/)
[6806809C:6807399C trc] Connection: keep-alive
[6806809C:6807399C trc] Accept-Encoding: gzip, deflate
[6806809C:6807399C trc] Host: localhost
[6806809C:6807399C trc] --------------------
[6806809C:6807399C trc] evbuffer_add (fd 9): 175 B
[6806809C:6807399C trc] HTTP client reading status line
[6806809C:6807399C trc] leastSize waiting for new data.
[6806809C:00000000 trc] socket 9 write event (false)!
[6806809C:00000000 trc] socket 9 read event!
[6806809C:6807399C trc] evbuffer_read 17 bytes (fd 9)
[6806809C:6807399C trc]  .. got 17 bytes
[6806809C:6807399C trc] read data
[6806809C:6807399C trc] stln: HTTP/1.1 200 OK
[6806809C:6807399C trc] evbuffer_read 47 bytes (fd 9)
[6806809C:6807399C trc]  .. got 47 bytes
[6806809C:6807399C trc] read data
[6806809C:6807399C trc] evbuffer_read 26 bytes (fd 9)
[6806809C:6807399C trc]  .. got 26 bytes
[6806809C:6807399C trc] read data
[6806809C:6807399C trc] evbuffer_read 37 bytes (fd 9)
[6806809C:6807399C trc]  .. got 37 bytes
[6806809C:6807399C trc] read data
[6806809C:6807399C trc] evbuffer_read 28 bytes (fd 9)
[6806809C:6807399C trc]  .. got 28 bytes
[6806809C:6807399C trc] read data
[6806809C:6807399C trc] evbuffer_read 31 bytes (fd 9)
[6806809C:6807399C trc]  .. got 31 bytes
[6806809C:6807399C trc] read data
[6806809C:6807399C trc] evbuffer_read 2 bytes (fd 9)
[6806809C:6807399C trc]  .. got 2 bytes
[6806809C:6807399C trc] read data
[6806809C:6807399C trc] ---------------------
[6806809C:6807399C trc] HTTP client response:
[6806809C:6807399C trc] ---------------------
[6806809C:6807399C trc] HTTP/1.1 200 OK
[6806809C:6807399C trc] Content-Type: application/json; charset=utf-8
[6806809C:6807399C trc] Server: Mono-HTTPAPI/1.0
[6806809C:6807399C trc] Date: Fri, 12 Jun 2015 14:51:06 GMT
[6806809C:6807399C trc] Transfer-Encoding: chunked
[6806809C:6807399C trc] Keep-Alive: timeout=15,max=23
[6806809C:6807399C trc] ---------------------
[6806809C:6807399C trc] read next chunk header
[6806809C:6807399C trc] evbuffer_read 5 bytes (fd 9)
[6806809C:6807399C trc]  .. got 5 bytes
[6806809C:6807399C trc] read data
[6806809C:6807399C trc] got chunk header: 9d8
[6806809C:6807399C trc] evbuffer_read 2520 bytes (fd 9)
[6806809C:6807399C trc]  .. got 2520 bytes
[6806809C:6807399C trc] read data
[6806809C:6807399C trc] evbuffer_read 2 bytes (fd 9)
[6806809C:6807399C trc]  .. got 0 bytes
[6806809C:00000000 trc] socket 9 read event!
[6806809C:6807399C trc] evbuffer_read 2 bytes (fd 9)
[6806809C:6807399C trc]  .. got 2 bytes
[6806809C:6807399C trc] read data
[6806809C:6807399C trc] read next chunk header
[6806809C:6807399C trc] evbuffer_read 3 bytes (fd 9)
[6806809C:6807399C trc]  .. got 3 bytes
[6806809C:6807399C trc] read data
[6806809C:6807399C trc] got chunk header: 0
[6806809C:6807399C trc] evbuffer_read 2 bytes (fd 9)
[6806809C:6807399C trc]  .. got 2 bytes
[6806809C:6807399C trc] read data
[6806809C:6807399C trc] returning HTTPClient connection 0 of 1


I think the connection is being reused here.