
Proyecto desarrollado en 1337 Khouribga Coding School.
Autores: @jamiafathiya y @ACHRAFELKHNISSI & @AbellaISMail7
HTTP significa Protocolo de transferencia de hipertexto, que es un protocolo utilizado para transferir hipertexto. Esto plantea dos preguntas: ¿Qué es un protocolo y qué es hipertexto? En este contexto, un protocolo es un sistema de reglas que permite la comunicación de información entre diferentes entidades, como las computadoras. Hypertext es un término obsoleto para el texto que se muestra en una pantalla de computadora que contiene hipervínculos a otros documentos web de texto, es decir,. Por lo tanto, el protocolo de transferencia de hipertexto se refiere al conjunto de reglas, servidores y navegadores utilizados para transferir documentos web de un lado a otro.
HTTP permite sesiones, y los estados almacenados se comparten entre el navegador y el servidor. Si un visitante está navegando por una galería de fotos, el navegador y el servidor pueden intercambiar información sobre la ubicación del visitante en la secuencia pasando información de un lado a otro en forma de cookies. Cuando la página se vuelve a cargar, el navegador envía una cookie al servidor que indica la última posición visitada, lo que permite al espectador reanudar desde ese punto. Esto significa que si bien HTTP es estatoso, no es sin sesión.
| Término | Definición |
|---|---|
| Navegador | Una aplicación utilizada para acceder y navegar entre documentos HTML. |
| Agente de usuario | Una aplicación que actúa en nombre del usuario, típicamente un navegador. |
| TCP | Corto para el protocolo de control de transmisión, uno de los principales protocolos de Internet utilizados por la red mundial, el correo electrónico, el FTP y la administración remota. |
| IP | Corto para el protocolo de Internet. IP se usa para transferir datos entre computadoras a través de una red. Cada dispositivo conectado a Internet tiene una dirección IP. |
| Url | Abreviatura de un localizador de recursos uniformes, una dirección que apunta a un recurso en la web. |
| DNS | Corto para el servidor de nombres de dominio. DNS cataloga todas las URL del nombre de dominio y las señala a las direcciones IP de los servidores. |
| Recurso | El archivo o archivos disponibles en un servidor cuando sigue una URL. |
| Servidor | Una computadora en Internet que ejecuta alguna forma de almacenamiento de datos y aplicación para compartir, más comúnmente una aplicación de servidor web. |
| Apoderado | Software o servicio de hardware que actúa como una persona intermedia entre clientes y servidores. |
| Parejas de solicitud de solicitud | Los clientes y los servidores se comunican a través de HTTP utilizando pares de solicitud de solicitud. Se envía una solicitud y se devuelve una respuesta. |
| Encabezamiento | Las solicitudes y respuestas usan encabezados HTTP para pasar información de un lado a otro. |
| Método de solicitud HTTP/verbo | Cada solicitud HTTP contiene un método, también conocido como verbo, que explica qué acción quiere realizar el remitente en el recurso (por ejemplo, Get, Put, Eliminar). |
| Código de respuesta de estado | Un código numérico en el rango de 100 a 500 que describe qué tipo de respuesta envió el servidor al cliente. |
| Cache | Un método para almacenar datos en el cliente o el servidor para acelerar el rendimiento. |
| Apátrida | HTTP es apátero, lo que significa que cada solicitud y respuesta es única y no se almacena ningún estado. |
| Galleta | Una cadena de datos pasó de un lado a otro entre el cliente y el servidor para crear una sesión con estado. |
| Sesión | Los clientes y los servidores pueden compartir información sobre los estados pasando información de ida y vuelta, creando una sesión. |


| Método | Descripción | Éxito | Falla |
|---|---|---|---|
| CONSEGUIR | Obtenga el recurso especificado, si está disponible | 200 OK | 404 no encontrado |
| CORREO | Crea un recurso nuevo y agrégalo a una colección | 201 creado | 401 no autorizado, 409 conflicto, 404 no encontrado |
| PONER | Actualizar una identificación o identificación basada en recursos de singleton existentes | 200 OK | 401 no autorizado, 404 no encontrado, 405 método no permitido |
| PARCHE | Modificar una identificación o identificación basada en recursos de Singleton | 200 OK | 401 no autorizado, 404 no encontrado, 405 método no permitido |
| BORRAR | Eliminar o ID basado en recursos singleton (no puede eliminar una colección de recursos) | 200 OK | 401 no autorizado, 404 no encontrado |
| OPCIÓN | Obtenga las opciones disponibles de este recurso | 200 OK | - |
| CABEZA | Obtenga solo los encabezados de respuesta del recurso | 200 OK | 404 no encontrado |
Esta sección incluye la descripción de las funciones necesarias para crear un servidor web.
int getaddrinfo ( const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); node : el nombre de host o la dirección IP del servidor.
node es NULL , se usa la dirección IP del host local. service : el número de puerto del servidor.
service es NULL , se utiliza el número de puerto predeterminado para el servicio solicitado en hints . hints : un puntero a una struct addrinfo que especifica los criterios para seleccionar las estructuras de dirección de socket devueltas en la lista apuntada por res .
hints son NULL , entonces la lista devuelta incluye direcciones de socket para todos los tipos de socket, para todas las familias de protocolo respaldadas por la familia de direcciones del nodo especificado y para la dirección del host local.struct addrinfo :ai_family : la familia de direcciones. Las siguientes constantes se definen para el campo ai_family :AF_INET : protocolos de Internet IPv4AF_INET6 : Protocolos de Internet IPv6AF_UNIX : comunicación localAF_UNSPEC : no especificadoai_socktype : el tipo de socket. Las siguientes constantes se definen para el campo ai_socktype :SOCK_STREAM : proporciona transmisiones de bytes basadas en conexión secuenciadas, confiables, de dos vías. Se puede admitir un mecanismo de transmisión de datos fuera de banda.SOCK_DGRAM : admite datagramas (mensajes sin conexión, poco confiables de una longitud máxima fija).SOCK_RAW : proporciona acceso de protocolo de red sin procesar.SOCK_RDM : proporciona una capa de datagrama confiable que no garantiza el pedido.SOCK_SEQPACKET : proporciona una capa de paquete secuenciada que no garantiza el pedido.ai_protocol : el protocolo para el enchufe. Las siguientes constantes se definen para el campo ai_protocol :IPPROTO_TCP : Protocolo de control de transmisiónIPPROTO_UDP : Protocolo de datagrama de usuarioIPPROTO_RAW : interfaz de protocolo RAWIPPROTO_IP : Protocolo de InternetIPPROTO_ICMP : Protocolo de mensajes de control de InternetIPPROTO_IGMP : Protocolo de gestión de grupos de InternetIPPROTO_IPV4 : Protocolo de Internet versión 4IPPROTO_IPV6 : Protocolo de Internet versión 6 res : un puntero a una lista vinculada de una o más estructuras de struct addrinfo que contiene información de respuesta sobre el host.
Valor de retorno: en el éxito, se devuelve cero. En error, -1 se devuelve y errno se establece adecuadamente.
struct addrinfo :
struct addrinfo {
int ai_flags; // input flags
int ai_family; // socket protocol family
int ai_socktype; // socket type
int ai_protocol; // protocol for socket
socklen_t ai_addrlen; // socket address length
struct sockaddr *ai_addr; // socket address
char * ai_canonname; // service name
struct addrinfo *ai_next; // next item in the list
}; int socket ( int domain, int type, int protocol);domain : el dominio de comunicación, que especifica la semántica de comunicación y la familia del protocolo que se utilizará. Las siguientes constantes se definen para el argumento domain :AF_INET : protocolos de Internet IPv4AF_INET6 : Protocolos de Internet IPv6AF_UNIX : comunicación localAF_UNSPEC : no especificadotype : la semántica de comunicación. Las siguientes constantes se definen para el argumento type :SOCK_STREAM : proporciona transmisiones de bytes basadas en conexión secuenciadas, confiables, de dos vías. Se puede admitir un mecanismo de transmisión de datos fuera de banda.SOCK_DGRAM : admite datagramas (mensajes sin conexión, poco confiables de una longitud máxima fija).SOCK_RAW : proporciona acceso de protocolo de red sin procesar.SOCK_RDM : proporciona una capa de datagrama confiable que no garantiza el pedido.SOCK_SEQPACKET : proporciona una capa de paquete secuenciada que no garantiza el pedido.protocol : el protocolo que se utilizará con el enchufe. Normalmente, solo existe un solo protocolo para soportar un tipo de enchufe particular dentro de una familia de protocolo dada, en cuyo caso protocol puede especificarse como 0. Las siguientes constantes se definen para el argumento protocol :IPPROTO_TCP : Protocolo de control de transmisiónIPPROTO_UDP : Protocolo de datagrama de usuarioIPPROTO_SCTP : Protocolo de transmisión de control de flujoIPPROTO_TIPC : comunicación transparente entre procesosIPPROTO_RAW : paquetes de IP en brutoerrno se establece adecuadamente. int bind ( int sockfd, const struct sockaddr *addr, socklen_t addrlen);sockfd : el descriptor de archivo del socket que estará atado.addr : un puntero a una estructura sockaddr que contiene la dirección que estará unida al enchufe. La longitud y el formato de la dirección dependen de la familia de direcciones del enchufe.addrlen : El tamaño, en bytes, de la estructura de direcciones señalada por el argumento addr .errno se establece adecuadamente. int listen ( int sockfd, int backlog);sockfd : el descriptor de archivo del socket que se escuchará.backlog : la longitud máxima a la que puede crecer la cola de conexiones pendientes para sockfd .errno se establece adecuadamente. int accept ( int sockfd, struct sockaddr *addr, socklen_t *addrlen);sockfd : el descriptor de archivo del socket que se aceptará.addr : un puntero a una estructura sockaddr . Esta estructura se llena con la dirección de la toma de pares, como se conoce por la capa de comunicaciones. El formato exacto de la dirección devuelta se determina por la familia de direcciones del enchufe. Cuando la dirección devuelta es demasiado larga para caber en la estructura sockaddr suministrada, la dirección se trunca.addrlen : un puntero a un objeto socklen_t que en la entrada especifica la longitud de la estructura sockaddr suministrada, y la salida especifica la longitud de la dirección almacenada.errno se establece adecuadamente. ssize_t recv ( int sockfd, void *buf, size_t len, int flags);sockfd : el descriptor de archivo del socket que se recibirá.buf : un puntero a un búfer donde se debe almacenar el mensaje.len : La longitud en los bytes del búfer apuntó por el argumento buf .flags : Especifica el tipo de recepción de mensajes. El valor se forma lógicamente o cero o más de los siguientes valores:MSG_OOB : procesar datos fuera de banda.MSG_PEEK : mira los mensajes entrantes.MSG_WAITALL : espere una solicitud completa, a menos que el socket no esté bloqueado.MSG_DONTWAIT : habilita la operación sin bloqueo; Si la operación se bloqueara, la llamada falla con el error EAGAIN o EWOULDBLOCK .MSG_NOSIGNAL : No genere SIGPIPE al escribir en una tubería sin nadie para leerla.recv() devuelve 0. En el error, -1 se devuelve y errno se establece adecuadamente. ssize_t send ( int sockfd, const void *buf, size_t len, int flags);sockfd : el descriptor de archivo del socket que se enviará.buf : un puntero a un búfer que contiene el mensaje que se enviará.len : La longitud en los bytes del mensaje señaló por el argumento buf .MSG_OOB : procesar datos fuera de banda.MSG_DONTROUTE : Bypass Routing, use la interfaz directa.MSG_DONTWAIT : habilita la operación sin bloqueo; Si la operación se bloqueara, la llamada falla con el error EAGAIN o EWOULDBLOCK .MSG_NOSIGNAL : No genere SIGPIPE al escribir en una tubería sin nadie para leerla.errno se establece adecuadamente. General
Solicitud HTTP
Respuesta HTTP
CGI
Prueba de estrés