Code Monkey home page Code Monkey logo

webserver's Introduction

馃寪 Web Server HTTP/1.1 en C++98

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.

GitHub code size in bytes GitHub top language GitHub last commit GitHub closed issues GitHub pull requests GitHub closed pull requests


HTTP/1.1 RFC 9112!

Matrix interconectada 隆隆Nodos!!

HTTP/1.1

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).

T茅rminos clave

  • 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.

Flujo de HTTP

  1. El navegador establece una conexi贸n TCP con el servidor.
  2. El navegador env铆a un mensaje HTTP al servidor, solicitando un recurso.
  3. El servidor procesa la solicitud y env铆a una respuesta al navegador.
  4. Una vez recibida la respuesta, la conexi贸n TCP se cierra.

M茅todos HTTP

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.

Funciones

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.

驴Como se usa?

git clone https://github.com/dugonzal/webserver && cd webserver
make && ./webserver || ./webserver [archivo de configuracion]

Palabras reservadas en la key del archiv贸 de configuracion

  "server", "location", "include", "server_name",
  "listen", "index", "return", "alias", "root",
  "autoindex", "client_max_body_size" "error_page",
  "cgi_path", "allow_methods"

Ejemplo simple de archivo de configuracion

server  {
listen	localhost:4242;
root	/dir;
index	index.html;
client_max_body_size 42;
allow_methods	GET;
};

Ejemplo completo de archivo de configuracion

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

webserver's People

Contributors

dugonzal avatar jokiton avatar inunez-g avatar

Stargazers

 avatar

Watchers

 avatar  avatar

webserver's Issues

Parsear el mensaje del Cliente

26 de Marzo, fecha limite.

  • Retrieve method

  • Retrieve HTTP Version

  • Retrieve route to the file.

  • Get size of message in bytes

  • Add security for parsing these variables

  • Add a case when given method, version or route is erroneous.

  • Add better error messages & more concrete

  • Use switch() to differ between methods

  • Change names of classes {Config->WebServer} {VirtualServer->ServerManager}

  • Define some specific error cases {405 & 505}

  • Merged inunez-g branch into other branches

Some error cases fall through here

for (vector<string>::iterator it = data.begin(); \
it != data.end() && ++i < nServers; it++) {
if (it->find("server") != string::npos) {
while (++it != data.end() && it->find("};") == string::npos) {
if (it->size() - 1 == ';')
it->erase(it->size() - 1);
dataServers[i].push_back(*it);
}
}

Configuration file default.conf line 34 :
return 301 https://$server_name$request_uri;

This line is counted as a server block in this code, I suggest to use std::find() with server {

Merge

realizar un merge comun a Master, para poder avanzar, despues de mergear a la rama D-0 desde J-0, el codigo no me compila tal cual,
creo que es debido al entorno de desarrollo que es diferente de Mac a Linux

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    馃枛 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 馃搳馃搱馃帀

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google 鉂わ笍 Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.