You can use any protocol on port 80. Using HTTP is a good choice, but you do not need to use it.
Compression Which one to choose? We do not limit ourselves to gzip or deflate, simply because they are most popular for HTTP traffic. If there is any unusual compression scheme that gives the best results for our task - so be it.
The best compression depends on the content. I would use Deflator for simplicity, however BZIP2 may give better results (library required)
For your file type, you can first perform some compression specific to this type, to make the data smaller.
Separation. Obviously, the file needs to be divided and transferred in several parallel sessions.
This is not obvious to me. Downloading data in parallel improves performance by capturing most of the available bandwidth (for example, extruding other users with the same bandwidth). This may be undesirable or even pointless (if there are no other users)
Background. Transferring a huge file takes a lot of time. Does this affect the decision, if at all?
You will need the ability to restart the download at any time.
Security. Is there an HTTPS way? Or should we take a different approach, given the amount of data?
I am sure this is great, regardless of the amount of data.
I am completely ready to encode it myself (it should be fun), but I can not avoid the question of whether there are ready-made solutions that satisfy my requirements.
I would try to use existing web servers to make sure they match the job. I would be surprised if there wasnβt a free web server that does all of the above.
Here is a selection of http://www.java-sources.net/open-source/web-servers