Each of these commands will run an ad hoc http static server in your current (or specified) directory, available at http://localhost:8000. Use this power wisely.
$ python -m SimpleHTTPServer 8000
$ python -m http.server 8000
$ twistd -n web -p 8000 --path .
Or:
$ 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()'
Depends on Twisted.
$ ruby -rwebrick -e'WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => Dir.pwd).start'
Credit: Barking Iguana
$ ruby -run -ehttpd . -p8000
Credit: nobu
$ gem install adsf # install dependency
$ adsf -p 8000
Credit: twome
No directory listings.
$ gem install sinatra # install dependency
$ ruby -rsinatra -e'set :public_folder, "."; set :port, 8000'
No directory listings.
$ 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
$ cpan Plack # install dependency
$ plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");' -p 8000
Credit: miyagawa
$ cpan Mojolicious::Lite # install dependency
$ perl -MMojolicious::Lite -MCwd -e 'app->static->paths->[0]=getcwd; app->start' daemon -l http://*:8000
No directory listings.
$ 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 /
.
$ npm install -g node-static # install dependency
$ static -p 8000
No directory listings.
$ php -S 127.0.0.1:8000
Credit: /u/prawnsalad and MattLicense
No directory listings.
$ 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 -f -p 8000
Credit: lvm
$ webfsd -F -p 8000
Depends on webfs.
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.
If you have any suggestions, drop them in the comments below or on the reddit discussion. To get on this list, a solution must:
- serve static files using your current directory (or a specified directory) as the server root,
- be able to be run with a single, one line command (dependencies are fine if they're a one-time thing),
- serve basic file types (html, css, js, images) with proper mime types,
- require no configuration (from files or otherwise) beyond the command itself (no framework-specific servers, etc)
- must run, or have a mode where it can run, in the foreground (i.e. no daemons)
@nilslindemann:
Browsers' security is extremely brittle, and it's already extremely hard for them to protect themselves from abuses by rogue sites and fake ads or limiting the impact of poorly written plugins that always risk to be used to steal user information. By opening them to the outside world using an incoming connection, you're suddenly bypassing a lot of the isolation efforts made in the browser by immediately exposing the process to the outside world. You just need a small bug in the server or a small overlook in the isolation between the server and the rest of the browser and your browser's sensitive info such as passwords, cookies, certificates, or history can immediately leak, or some dummy certs and cookies, or trojans can be inserted.