Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

This question is a followup to How to copy files to an untrusted computer?, as there doesn't seem to be a dedicated app for this purpose, I am now searching for a http or ftp server as an alternative. More specifically I am searching for a lightweight server that is usable for simple one-time file transfer between computers. By that I mean it should act as rsync/scp replacement to get files from one computer to another, not as a classic web server. Furthermore it should:

  • run in userspace
  • be trivial to configure (i.e. no config file, everything doable via command line)
  • support username/password
  • support continuation of downloads
  • support the export of single files instead of whole directories

dbr's answer to the previous question gets close, but is of course just an ad hoc hack that lacks many useful features.

share|improve this question

closed as off-topic by Journeyman Geek, Tog, gronostaj, Ƭᴇcʜιᴇ007, Mokubai Aug 11 '13 at 12:06

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking product, service, or learning material recommendations are off-topic because they tend to become obsolete quickly. Instead, describe your situation and the specific problem you're trying to solve. Here are a few suggestions on how to properly ask this type of question." – Journeyman Geek, Tog, gronostaj, Ƭᴇcʜιᴇ007, Mokubai
If this question can be reworded to fit the rules in the help center, please edit the question.

7 Answers 7

up vote 14 down vote accepted

I'm often using this quick Python hack to serve a directory over HTTP.

python -m SimpleHTTPServer &

will serve the current directory.

By default, it binds to port 8000.

To choose another port:

python -m SimpleHTTPServer 9090 &

If you choose a port lower than 1024 on *nix, you might need root privileges, otherwise bind() will fail.

share|improve this answer
    
Great... Thanks! –  Sachin Shekhar May 27 '12 at 15:41
1  
Really not sure why this question was closed. The question and the answer were both very useful. –  merlin2011 Nov 9 '13 at 22:26
    
Or the Python 3 equivalent: python3 -m http.server –  Eliran Malka Feb 14 at 21:00

Someone on SO pointed me at Woof. A minimal httpd in python with an interface optimized just for such uses. It doesn't actually meet all your requirements, but by allowing you to specify the number of times it will connect it allows you to use the "Are you ready? I'm starting the server now." approach to securing the transfer.

To allow one (1) connection to download thisfile on port 8080, you just run

$ woof thisfile

It's that easy.

Here is the rather abused original. If you like it, go vote for Nate.

share|improve this answer

You can try webfs which is available through the Ubuntu repository:

Webfs (a.k.a. webfsd) is a simple HTTP server for purely static content. You can use it to serve the content of an FTP server via HTTP, for example. It can also be used to quickly export some files by starting an httpd server in a few seconds, without editing config files first.

Another option is HFS (Http File Server), a Windows app that works well through Wine.

HFS (Http File Server) is file sharing software which allows you to send and receive files. You can limit this sharing to just a few friends, or be open to the whole world. HFS is different from classic file sharing because there is no network. [...] Since it is actually a web server, your friends can download files as if they were downloading from a website using a web browser.

share|improve this answer
1  
What's up with the down votes here? The OP asked for simple http servers, and people have offered them. So what is the problem. –  dmckee Sep 19 '09 at 2:02

Please ignore if you are not open to alternatives, but the fact that you are willing to install a HTTP server with no preferences shows me that you want to get the job done of transfering a file more so than how it is done -

May I recommend that you install a FTP server?

It will allow you to pretty much do everything you require and is usually very easy to set up,you can even configure the port to use 80 if that is a requirement.

share|improve this answer
1  
FTP would of course be fine too, but most FTP servers I know aren't exactly lightweight and come with plenty of ugly extra baggage that makes them unfit for simple one time file transfers (i.e. require root rights, accounts on the machine for password access, unflexible directory handling, etc.). With Pure-FTPd I couldn't even figure out how to start it as non-root user. –  Grumbel Sep 19 '09 at 1:28
1  
Agreed. It's called File Transfer Protocol for a reason. HTTP, on the other hand, is HyperText Transfer Protocol. Chances are you're not interested in HyperText right now. –  Lee B Sep 19 '09 at 1:37
1  
FTP is not a stupid idea, but have you a suggestion for one that is a bog simple to set up as the OP has requested? –  dmckee Sep 19 '09 at 2:01
1  
The advantage of http is that each and every general use computer has a web browser on it, and the user will be comfortable using it. OK, it supports ftp too, but if your going to use a web browser anyway... –  dmckee Sep 19 '09 at 2:18
2  
Wil, we're not talking about general purpose servers like Apache here. We're talking about special-purpose, minimal tools. Woof makes chttpd look heavy. –  dmckee Sep 19 '09 at 2:36

May I recommend http://code.google.com/p/pyftpdlib/ ?
It's light-weight, download the source, and write a Python script(just copy the quick start part on the home page is enough, 5-6 lines, set user name and password, home directory, etc.)
I use it for personal pc to pc file transfer(On Ubuntu Hardy). one known issue (and I can bear it with) is it can't handle Unicode(non-ASCII) well.

share|improve this answer

The answer is simple: thttpd. It wins hands-down in performance, memory usage, and security. And by security I mean it's secure by virtue of competent design and not doing anything stupid, not that it has all sorts of "security" bells and whistles. It's also near-optimal with respect to size and simplicity.

If you need even smaller and simpler, BusyBox has a httpd applet that might also meet your needs.

I'm not sure if they meet some of your more off requirements like serving single files, but you can do that with a wrapper that puts symlinks in the http root. If you do this with thttpd, however, you'll have to disable symlink restrictions.

(I know this question is old, but it's a top result on Google and the existing answers are anything but light-weight.)

share|improve this answer
1  
thttpd used to be my favorite answer too, but it was removed from Debian, Ubuntu, and RedHat in 2011 because it was "orphaned, has release-critical bugs, and is dead upstream." I wouldn't recommend it anymore. –  poolie Apr 26 '13 at 4:59

You can also try HFS also called HTTP File Server ( http://www.rejetto.com/hfs/) While its is a windows application, it is said to work well using WINE. Its very low maintenance and even complete novices who don't even know what a File Server is will be able to use it without much effort. It supports drag and drop functionality and you can even control which IP addresses can access the files and supports users accounts and download speed control.

share|improve this answer
1  
How does that answer the question? Be more specific. –  user 99572 is fine Aug 2 '13 at 7:45

Not the answer you're looking for? Browse other questions tagged or ask your own question.