Programar un servidor web no es una tarea sencilla, requiere de conocimiento en temas variados como: lenguaje C, sockets, conceptos de servidor/cliente, protocolos (HTTP/1.1), lectura de archivos, etc.
Intentare explicar lo que he aprendido:
Se puede decir que el socket es como un punto final de comunicación. Se puede comparar con los teléfonos, un teléfono se utiliza para realizar la llamada, y es necesario otro para contestar; podemos concluir entonces que un socket se comunica con otro socket.
El socket es una abstracción, el programador no se tiene que preocupar por como funciona un dispositivo de una marca especifica, o el modelo, etc; de eso se debe encargar el sistema operativo.
Un servidor es una aplicación que ofrece servicios, y un cliente es una aplicación que solicita y utiliza los servicios que presta el servidor. Para poder entenderse, utilizan los protocolos, que podemos comparar con los idiomas, tiene normas, simbolos, palabras, etc; para que dos personas se puedan comunicar, deben hablar el mismo idioma.
El protocolo HTTP/1.1 es un estándar de Internet, se utiliza principalmente en la comunicación Web. Permite que un Servidor Web y un Navegador de internet se comuniquen de la manera adecuada.
GET es parte del protocolo HTTP/1.1, este le indica al Servidor Web que documento es el que desea obtener. ejemplo "GET /index.html"
La información en Web por lo general estan en HTML, y esos se almacenan en archivos, guardados en un disco. Cuando el Servidor Web recibe la petición del cliente Navegador de Internet (Firefox), este examina la solicitud; dentro de la solicitud esta el nombre del documento (archivo) que el cliente desea obtener. El Servidor Web busca ese archivo en el disco, si lo encuentra, se lo envía al cliente, si no, envía un mensaje indicando que no existe el documento.
En la imagen de arriba, se puede apreciar la solicitud que realiza el Navegador al servidor web.
Bueno, por ahora eso es lo que tengo. Mas adelante subiré código del servidor Web.