TCP is low level stuff. TCP is how you establish a connection over the internet (actually you can use UDP or a proprietary protocol, but TCP is the most useful and by far the most common). TCP establishes a reliable connection between two computers. When you open a socket and send 'abc' no line noise will cause you to accidentally send 'cba' or 'bbc'. You can send as many bytes as you like over TCP (hence forth referred to as a connection) but what those bytes mean is a completely separate thing. HTTP is a protocol. A language of sorts. If you speak HTTP and I speak HTTP than we can both exchange documents over a connection. When you send me a certain set of bytes, I know what they mean. Actually most programs only implement the client or the server dialect of HTTP, not both. HTTP does support uploading, but that is not flexible like its downloading. HTTPS is just HTTP over a secure connection. The secure connection is established using SSL.