Web Server es un proyecto desarrollado en la escuela 42. Permite comprender el funcionamiento de un servidor HTTP y c贸mo se comunican los clientes y los servidores en la red.
HTTP (Protocolo de Transferencia de Hipertexto) es un protocolo utilizado para transferir hipertexto en la World Wide Web. Facilita la comunicaci贸n entre clientes (como navegadores web) y servidores (donde se almacenan y sirven los recursos web).
- Navegador: Aplicaci贸n utilizada para acceder y navegar entre documentos HTML.
- Agente de usuario: Aplicaci贸n que act煤a en nombre del usuario, t铆picamente un navegador.
- TCP (Protocolo de Control de Transmisi贸n): Protocolo de internet utilizado para la comunicaci贸n en la web.
- IP (Protocolo de Internet): Es un protocolo fundamental que se utiliza para enrutar y transferir datos entre dispositivos en una red.
- URL (Localizador de recursos uniforme): Direcci贸n que apunta a un recurso en la web.
- DNS (Servidor de nombres de dominio): Cataloga todas las URL de nombres de dominio y las direcciona a las direcciones IP de los servidores.
- Sesi贸n: Comunicaci贸n persistente entre un cliente y un servidor.
- Cookie: Datos intercambiados entre el cliente y el servidor para mantener una sesi贸n.
- El navegador establece una conexi贸n TCP con el servidor.
- El navegador env铆a un mensaje HTTP al servidor, solicitando un recurso.
- El servidor procesa la solicitud y env铆a una respuesta al navegador.
- Una vez recibida la respuesta, la conexi贸n TCP se cierra.
Los m茅todos HTTP especifican la acci贸n que el remitente desea realizar en el recurso solicitado.
- GET: Obtener el recurso especificado.
- POST: Crear un nuevo recurso y agregarlo a una colecci贸n.
- PUT: Actualizar un recurso existente.
- PATCH: Modificar un recurso existente.
- DELETE: Eliminar un recurso.
- OPTION: Obtener las opciones disponibles para un recurso.
- HEAD: Obtener solo los encabezados de respuesta de un recurso.
Este proyecto incluye implementaciones de funciones clave para crear un servidor http/1.1.
- Socket(): Crea un socket.
- Poll(): permite monitorear m煤ltiples descriptores de archivos para detectar eventos de entrada/salida sin bloquear el proceso.
- Getaddrinfo(): Resuelve una direcci贸n IP y un puerto.
- Bind(): Asocia un socket con una direcci贸n IP y un puerto.
- Listen(): Pone un socket en modo de escucha.
- Accept(): Acepta una conexi贸n entrante en un socket.
- Recv(): Recibe datos de un socket.
- Send(): Env铆a datos a trav茅s de un socket.
git clone https://github.com/dugonzal/webserver && cd webserver
make && ./webserver || ./webserver [archivo de configuracion]
"server", "location", "include", "server_name",
"listen", "index", "return", "alias", "root",
"autoindex", "client_max_body_size" "error_page",
"cgi_path", "allow_methods"
server {
listen localhost:4242;
root /dir;
index index.html;
client_max_body_size 42;
allow_methods GET;
};
server {
listen localhost:4242;
autoindex on;
server_name tetaedro;
root resources;
allow_methods GET POST;
client_max_body_size 4242;
# archivo de configuracion incluido
include ./conf/location.conf;
location / {
index main.py;
alias ./resources;
cgi_path ./cgi-bin;
resources ./resources;
autoindex on;
allow_methods GET POST;
error_page 4242 errorPages.html;
}
location /redirect {
index index.html;
allow_methods GET;
root ./resources;
client_max_body_size 42;
# hace una redireccion
return 301 http://www.42urduliz.com;
}
error_page 403 /error.html;
error_page 404 /error.html;
error_page 405 /error.html;
error_page 500 /error.html;
};
pruebas de estres
echo "example"
siege -c 255 -t 1M http://0.0.0.0:4242