Skip to content

Instantly share code, notes, and snippets.

@reider-roque
Forked from willurd/web-servers.md
Last active August 29, 2015 14:19
Show Gist options
  • Save reider-roque/a63a7a3cc4931ad44c94 to your computer and use it in GitHub Desktop.
Save reider-roque/a63a7a3cc4931ad44c94 to your computer and use it in GitHub Desktop.

Source: https://gist.github.com/willurd/5720255

Author: William Bowers (willurd)

Additions: Oleg Mitrofanov (reider-roque)

Each of these commands will run an ad hoc http static server in your current (or specified) directory, available at http://localhost:8000.

Python <= 2.3

$ python -c "import SimpleHTTPServer as s; s.test();" 8000

Python >= 2.4

$ python -m SimpleHTTPServer 8000

Python 3.x

$ python -m http.server 8000

Python (Twisted)

$ # pip install twisted # install dependency if not already present
$ twistd -n web -p 8000 --path .

Or:

$ # pip install twisted # install dependency if not already present
$ python -c 'from twisted.web.server import Site; from twisted.web.static import File; 
from twisted.internet import reactor; reactor.listenTCP(8000, Site(File("."))); 
reactor.run()'

Ruby

$ ruby -r webrick -e 'WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => Dir.pwd).start'

Credit: Barking Iguana

Ruby 1.9.2+

$ ruby -run -e httpd . -p8000

Credit: nobu

Ruby (adsf)

$ gem install adsf   # install dependency
$ adsf -p 8000

No directory listings.

Credit: twome

Ruby (Sinatra)

$ gem install sinatra   # install dependency
$ ruby -r sinatra -e 'set :public_folder, "."; set :port, 8000'

No directory listings.

Perl

$ # cpan HTTP::Daemon # install dependency if not already present
$ perl -MHTTP::Daemon -e '$d = HTTP::Daemon->new(LocalPort => 8000) or  +die $!; while 
($c = $d->accept) { while ($r = $c->get_request) { +$c->send_file_response(".".$r->url->path)
} }'

HTTP::Daemon comes preinstalled on many Linux distribution and thus works out of the box.

No Directory listings.

Credit: Anonymous Monk

Perl (HTTP::Server::Brick)

$ cpan HTTP::Server::Brick   # install dependency
$ perl -MHTTP::Server::Brick -e '$s=HTTP::Server::Brick->new(port=>8000); 
$s->mount("/"=>{path=>"."}); $s->start'

Credit: Anonymous Monk

Perl (IO::All)

$ cpan IO::All   # install dependency
$ perl -MIO::All -e 'io(":8080")->fork->accept->(sub { $_[0] < io(-x $1 ? "./$1 |" : $1) 
if /^GET \/(.*) / })'

Credit: Anonymous Monk

Perl (Plack)

$ cpan Plack   # install dependency
$ plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");' -p 8000

Credit: miyagawa

Perl (Mojolicious)

$ cpan Mojolicious::Lite   # install dependency
$ perl -MMojolicious::Lite -MCwd -e 'app->static->paths->[0]=getcwd; app->start' 
daemon -l http://*:8000

No directory listings.

Node.js (http-server)

$ npm install -g http-server   # install dependency
$ http-server -p 8000

Note: This server does funky things with relative paths. For example, if you have a file /tests/index.html, it will load index.html if you go to /test, but will treat relative paths as if they were coming from /.

Node.js (node-static)

$ npm install -g node-static   # install dependency
$ static -p 8000

No directory listings.

PHP >= 5.4

$ php -S 127.0.0.1:8000

No directory listings.

Credit: /u/prawnsalad and MattLicense

Erlang

$ erl -s inets -eval 'inets:start(httpd,[{server_name,"NAME"},{document_root, "."},
{server_root, "."},{port, 8000},{mime_types,[{"html","text/html"},{"htm","text/html"},
{"js","text/javascript"},{"css","text/css"},{"gif","image/gif"},{"jpg","image/jpeg"},
{"jpeg","image/jpeg"},{"png","image/png"}]}]).'

Credit: nivertech (with the addition of some basic mime types)

No directory listings.

busybox httpd

$ busybox httpd -f -p 8000

Credit: lvm

webfs

$ webfsd -F -p 8000

Depends on webfs.

IIS Express

C:\> "C:\Program Files (x86)\IIS Express\iisexpress.exe" /path:C:\MyWeb /port:8000

Depends on IIS Express.

Credit: /u/fjantomen

No directory listings. /path must be an absolute path.

Meta

If you have any suggestions, drop them in the comments below. To get on this list, a solution must:

  1. Serve static files using your current directory (or a specified directory) as the server root.
  2. Be able to be run with a single, one line command (dependencies are fine if they're a one-time thing).
  3. Require no configuration (from files or otherwise) beyond the command itself (no framework-specific servers, etc)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment