Those options stands for remote and local port forwarding.
There are blog posts explain these options better than this.
The awesome answer and sketches are reproduced here for occasional review:
ssh -L 80:localhost:80 SUPERSERVER
In Example 1, you specify that a connection made to the local port 80 is to be forwarded to port 80 on SUPERSERVER.
That means if someone connects to your computer with a webbrowser, he gets the response of the webserver running on SUPERSERVER.
You, on your local machine, have no webserver running.
ssh -R 80:localhost:80 tinyserver
In Example 2, you specify, that a connection made to the port 80 of tinyserver is to be forwarded to port 80 on your local machine.
That means if someone connects to the small and slow server with a webbrowser, he gets the response of the webserver running on your local machine.
The tinyserver, which has not enough diskspace for the big website, has no webserver running.
But people connecting to tinyserver think so.
Other things could be: The powerful machine has five webservers running on five different ports.
If a user connects to one of the five tinyservers at port 80 with his webbrowser, the request is redirected to the corresponding webserver running on the powerful machine.
That would be
Example 3 (before)
ssh -R 80:localhost:30180 tinyserver1
ssh -R 80:localhost:30280 tinyserver2
Or maybe your machine is only the connection between the powerful and the small servers.
Then it would be (for one of the tinyservers that play to have their own webservers):