28 comments

[ 0.22 ms ] story [ 78.3 ms ] thread
python -m SimpleHTTPServer
python -m SimpleHTTPServer cannot be configured from the command line. You'll need to write an additional py script to do anything useful. It's also missing a bunch of features you are going to want, like AutoIndex.

It also cannot serve 6,000 requests per second out of the box.

So is http-server supposed to be zero-configuration or configure-from-command-line server?
Both.

It ships with sane defaults so you can type "http-server", but it also may optionally be configured with things like a path, a port, a host, etc.

I did a `npm install http-server`.

It threw me a module not found error twice - once for `eyes` and once for `colors`

I ran it on a directory and tested it with `ab -n 100 -c 5 localhost:8080/`.

    Concurrency Level:      5
    Time taken for tests:   0.046 seconds
    Complete requests:      100
    Failed requests:        0
    Write errors:           0
    Total transferred:      175900 bytes
    HTML transferred:       149900 bytes
    Requests per second:    2159.97 [#/sec] (mean)
    Time per request:       2.315 [ms] (mean)
    Time per request:       0.463 [ms] (mean, across all concurrent requests)
    Transfer rate:          3710.33 [Kbytes/sec] received
So, in my micro benchmark, it doesn't do 6000 request/second on my box.

EDIT: `ab -n 15000 -c 5 localhost:8080/` is about 3000 req/s on my machine for http-server; 2200 for SimpleHTTPServer.

`python - SimpleHTTPServer 8080` gave me 1800 requests/second.

As far as configuration goes, for a dev server(that's what both SimpleHTTPServer and http-server are for me), the only configurations I do is to change the port.

Also, it's not like http-server is a highly configurable http server and framework combined into one - I for one can live without auto-index on/off.

Sorry about that. Bumped to v0.1.1 and published to npm.

Should fix [dist] issues. I have a feeling you need to update your npm to version 1.0 as well.

However, it is simple and it is zero-configuration - exactly your definition from your title.
I can think of use cases for wanting a quick simple, easy to configure http server.

I can think of use cases for wanting to be able to serve >1,000 requests a second.

I can't think of any that fall into both categories ... am I just lacking imagination?

once i wanted to serve a quick and dirty page of 200 thumbnails but python's HTTP server choked after a few people tried it concurrently. it's single threaded and just wouldn't hack it.

luckily if you have twisted installed, you can run "twistd web -n -p PORT --path ." it's just as easy as the basic HTTP server but way faster.

This is a very good suggestion.
ruby -e 'require "rack"; Rack::Handler::Thin.run(Rack::Directory.new("."), :Port => 6666)'
Have a look at gatling http://www.fefe.de/gatling/ it's a http/ftp/smb server based on libowfat (-lowfat ;0) with ssl support. Contains basically everything you need to share a file. It is also quite scalable, see http://bulk.fefe.de/scalability/ for an old benchmark.

One neat feature is that gatling disables the autoindex links for sorting the listing if wget is used to download/mirror a directory.

Gatling has a pretty good default configuration like automatically try to bound port 80 and if not available use port 8000 instead, automatically sharing the current directory etc. For a list of command-line configuration options have a look at http://paste.pocoo.org/show/409206/

I built a simple zero-configuration FTP server that runs in a browser some time ago (http://ezyftpserver.com/). Been wondering if I should do the same with a HTTP server?
I tried to visit your site but got redirected to a "Java Downloads for all operating systems" page. I do have java installed, but somehow your site doesn't notice and I always get redirected. I'm using ubuntu+chrome. It's annoying. I might not ever use the site, but I can't even see it with javascript enabled.
Nice work guys, any gzip support for js, css, and static html?
Looks nice, I was looking for something similar the other day, easily sharing a directory over HTTP from command line. I ended up writing a couple of very simple bash functions that added/removed the current directory to ~/Sites (I'm on a Mac). Apache did the rest.
sigh

Not another "Download this shell script over insecure HTTP and pipe it to sh" gimmick. Really? While http://news.ycombinator.com/item?id=2661209 is directly above this item on the front page?

Have we learned nothing?

Like the documentation clearly states, there is nothing stopping you from:

     git clone git://github.com/nodejitsu/http-server.git
     cd http-server
     node bin/http-server
The curl installation is for npm, the node package manager, which is actually optional to use http-server
Node.js. lol.