A simple Rack-based echo server
This echo server takes an HTTP request and returns the request headers and request body as a text-formatted response:
$ curl http://spreedly-echo.herokuapp.com \ -u 'test:password' \ -H "Content-Type: application/xml" \ -d '<request><element /></request>' HOST: spreedly-echo.herokuapp.com CONNECTION: close AUTHORIZATION: Basic dGVzdDpwYXNzd29yZA== USER_AGENT: curl/7.30.0 ACCEPT: */* X_REQUEST_ID: b6765e03-0511-407d-9eca-b77016361ad4 X_FORWARDED_FOR: 220.127.116.11 X_FORWARDED_PROTO: http X_FORWARDED_PORT: 80 VIA: 1.1 vegur CONNECT_TIME: 1 X_REQUEST_START: 1407774923595 TOTAL_ROUTE_TIME: 1 <request><element /></request>
The format of the response body is:
Request header: header value Request header: header value Request body
If you are using the echo server for the purpose of performance testing some HTTP round trip, it may be useful to know the processing time of the echo server. There is an
X-Runtime header returned in the response (as a header, not printed out in the response body) that includes the processing time in seconds.
-v flag in curl to see this value:
$ curl -v http://spreedly-echo.herokuapp.com -u 'test:password' -H "Content-Type: application/xml" -d '<request><element /></request>' * Adding handle: conn: 0x7fda79803a00 ... < X-Runtime: 0.000563 ...
Here, the request took .563 milliseconds to process.
Note: There may be (significant) overhead to this request time depending on your hosting infrastructure for the echo server. For instance, SSL termination will add connection overhead, as will routing through a cloud provider such as Heroku (where 40-50ms is standard for the most performant apps on their development service tier dynos).
To time a request end-to-end use a client-side tool such as the
$ time curl http://spreedly-echo.herokuapp.com \ -u 'test:password' \ -H "Content-Type: application/xml" \ -d '<request><element /></request>' ... real 0m0.166s user 0m0.110s sys 0m0.007s
Knowing that a request to the echo server completes its path through the Heroku server environment in ~50ms, and seeing an end to end time here of .166 seconds (166ms) we can conclude an HTTP connection overhead and network latency of about 100ms.