
Projeto desenvolvido na 1337 Khouribga Coding School.
Autores: @Jamiafathiya & @achrafelkhnissi & @abellaismail7
HTTP significa protocolo de transferência de hipertexto, que é um protocolo usado para transferir o hipertexto. Isso levanta duas questões: o que é um protocolo e o que é hipertexto? Nesse contexto, um protocolo é um sistema de regras que permite a comunicação de informações entre diferentes entidades, como computadores. O Hypertext é um termo desatualizado para o texto exibido em uma tela de computador que contém hiperlinks para outros documentos da Web de texto, ou seja,. Portanto, o protocolo de transferência de hipertexto refere -se ao conjunto de regras, servidores e navegadores usados para transferir documentos da Web para frente e para trás.
O HTTP permite sessões, e os estados armazenados são compartilhados entre o navegador e o servidor. Se um visitante estiver navegando em uma galeria de fotos, o navegador e o servidor poderão trocar informações sobre a localização do visitante na sequência, passando as informações para frente e para trás na forma de cookies. Quando a página é recarregada, o navegador envia um cookie para o servidor indicando a última posição visitada, permitindo que o espectador retome a partir desse ponto. Isso significa que, embora o HTTP esteja sem estado, não é sem sessão.
| Prazo | Definição |
|---|---|
| Navegador | Um aplicativo usado para acessar e navegar entre documentos HTML. |
| Agente de usuário | Um aplicativo que atua em nome do usuário, normalmente um navegador. |
| TCP | Abrevante para o protocolo de controle de transmissão, um dos principais protocolos da Internet usados pela World Wide Web, email, FTP e administração remota. |
| IP | Abreviação de protocolo da Internet. O IP é usado para transferir dados entre computadores em uma rede. Cada dispositivo conectado à Internet possui um endereço IP. |
| Url | Localizador de recursos de resumo para uniformes, um endereço apontando para um recurso na web. |
| Dns | Abreviação de nomes de domínio servidor. O DNS cataloga todos os URLs de nome de domínio e os aponta para os endereços IP dos servidores. |
| Recurso | O arquivo ou arquivos disponíveis em um servidor ao seguir um URL. |
| Servidor | Um computador na Internet executando algum tipo de aplicativo de armazenamento e compartilhamento de dados, geralmente um aplicativo de servidor da web. |
| Proxy | Software ou serviço de hardware atuando como uma pessoa intermediária entre clientes e servidores. |
| Pares de solicitação-resposta | Clientes e servidores se comunicam sobre o HTTP usando pares de solicitação-resposta. Uma solicitação é enviada e uma resposta é retornada. |
| Cabeçalho | Solicitações e respostas usam cabeçalhos HTTP para transmitir informações para frente e para trás. |
| Método de solicitação http/verbo | Cada solicitação HTTP contém um método, também conhecido como verbo, que explica em que ação o remetente deseja executar no recurso (por exemplo, obter, colocar, excluir). |
| Código de resposta do status | Um código numérico no intervalo de 100 a 500 descrevendo que tipo de resposta o servidor enviou de volta ao cliente. |
| Cache | Um método para armazenar dados no cliente ou no servidor para acelerar o desempenho. |
| Sem estado | O HTTP está sem estado, o que significa que toda solicitação e resposta é única e nenhum estado é armazenado. |
| Cookie | Uma série de dados passados entre o cliente e o servidor para criar uma sessão com estado. |
| Sessão | Clientes e servidores podem compartilhar informações sobre os estados passando informações de um lado para o outro, criando uma sessão. |


| Método | Descrição | Sucesso | Falha |
|---|---|---|---|
| PEGAR | Obtenha o recurso especificado, se disponível | 200 ok | 404 não encontrado |
| PUBLICAR | Crie um novo recurso e adicione -o a uma coleção | 201 criado | 401 não autorizado, 409 conflito, 404 não encontrado |
| COLOCAR | Atualize um recurso singleton existente ou ID | 200 ok | 401 não autorizado, 404 não encontrado, 405 Método não permitido |
| CORREÇÃO | Modificar um recurso singleton existente ou ID | 200 ok | 401 não autorizado, 404 não encontrado, 405 Método não permitido |
| EXCLUIR | Exclua a Singleton Recursos baseada ou ID (você não pode excluir uma coleção de recursos) | 200 ok | 401 não autorizado, 404 não encontrado |
| OPÇÃO | Obtenha as opções disponíveis neste recurso | 200 ok | - |
| CABEÇA | Obtenha apenas os cabeçalhos de resposta do recurso | 200 ok | 404 não encontrado |
Esta seção inclui a descrição das funções necessárias para criar um servidor da Web.
int getaddrinfo ( const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); node : o nome do host ou o endereço IP do servidor.
node for NULL , o endereço IP do host local será usado. service : o número da porta do servidor.
service for NULL , o número da porta padrão para o serviço solicitado em hints será usado. hints : um ponteiro para um struct addrinfo que especifica os critérios para selecionar as estruturas de endereço de soquete retornadas na lista apontada por res .
hints forem NULL , a lista retornada inclui endereços de soquete para todos os tipos de soquete, para todas as famílias de protocolo apoiadas pela família de endereços do nó especificado e para o endereço do host local.struct addrinfo :ai_family : a família de endereços. As seguintes constantes são definidas para o campo ai_family :AF_INET : Protocolos de Internet IPv4AF_INET6 : Protocolos de Internet IPv6AF_UNIX : comunicação localAF_UNSPEC : não especificadoai_socktype : o tipo de soquete. As seguintes constantes são definidas para o campo ai_socktype :SOCK_STREAM : fornece fluxos de bytes sequenciados, confiáveis, bidirecionais e baseados em conexão. Um mecanismo de transmissão de dados fora da banda pode ser suportado.SOCK_DGRAM : suporta datagramas (mensagens sem conexão e não confiáveis de um comprimento máximo fixo).SOCK_RAW : fornece acesso ao protocolo de rede bruta.SOCK_RDM : fornece uma camada confiável de datagrama que não garante pedidos.SOCK_SEQPACKET : fornece uma camada de pacotes sequenciada que não garante pedidos.ai_protocol : o protocolo para o soquete. As seguintes constantes são definidas para o campo ai_protocol :IPPROTO_TCP : protocolo de controle de transmissãoIPPROTO_UDP : protocolo de datagrama do usuárioIPPROTO_RAW : interface de protocolo RawIPPROTO_IP : Internet ProtocolIPPROTO_ICMP : Internet Control Message ProtocolIPPROTO_IGMP : protocolo de gerenciamento de grupos na InternetIPPROTO_IPV4 : Internet Protocol Versão 4IPPROTO_IPV6 : Internet Protocol Versão 6 res : Um ponteiro para uma lista vinculada de uma ou mais estruturas struct addrinfo que contém informações de resposta sobre o host.
Valor de retorno: No sucesso, o zero é retornado. Em erro, -1 é retornado e errno é definido adequadamente.
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 : o domínio da comunicação, que especifica a semântica da comunicação e a família de protocolo a ser usada. As seguintes constantes são definidas para o argumento domain :AF_INET : Protocolos de Internet IPv4AF_INET6 : Protocolos de Internet IPv6AF_UNIX : comunicação localAF_UNSPEC : não especificadotype : a semântica de comunicação. As seguintes constantes são definidas para o argumento type :SOCK_STREAM : fornece fluxos de bytes sequenciados, confiáveis, bidirecionais e baseados em conexão. Um mecanismo de transmissão de dados fora da banda pode ser suportado.SOCK_DGRAM : suporta datagramas (mensagens sem conexão e não confiáveis de um comprimento máximo fixo).SOCK_RAW : fornece acesso ao protocolo de rede bruta.SOCK_RDM : fornece uma camada confiável de datagrama que não garante pedidos.SOCK_SEQPACKET : fornece uma camada de pacotes sequenciada que não garante pedidos.protocol : o protocolo a ser usado com o soquete. Normalmente, existe apenas um único protocolo para suportar um tipo de soquete específico em uma determinada família de protocolos; nesse caso, protocol pode ser especificado como 0. As seguintes constantes são definidas para o argumento protocol :IPPROTO_TCP : protocolo de controle de transmissãoIPPROTO_UDP : protocolo de datagrama do usuárioIPPROTO_SCTP : protocolo de transmissão de controle de fluxoIPPROTO_TIPC : comunicação entre processos transparentesIPPROTO_RAW : pacotes IP cruserrno é definido adequadamente. int bind ( int sockfd, const struct sockaddr *addr, socklen_t addrlen);sockfd : o descritor de arquivo do soquete a ser vinculado.addr : um ponteiro para uma estrutura sockaddr contendo o endereço a ser ligado ao soquete. O comprimento e o formato do endereço dependem da família de endereços do soquete.addrlen : o tamanho, em bytes, da estrutura de endereço apontada pelo argumento addr .errno é definido adequadamente. int listen ( int sockfd, int backlog);sockfd : o descritor de arquivo do soquete a ser ouvido.backlog : o comprimento máximo ao qual a fila de conexões pendentes para sockfd pode crescer.errno é definido adequadamente. int accept ( int sockfd, struct sockaddr *addr, socklen_t *addrlen);sockfd : o descritor de arquivo do soquete a ser aceito.addr : um ponteiro para uma estrutura sockaddr . Essa estrutura é preenchida com o endereço do soquete de pares, como conhecido pela camada de comunicação. O formato exato do endereço retornado ADDR é determinado pela família de endereços do soquete. Quando o endereço retornado é muito longo para caber na estrutura sockaddr fornecida, o endereço é truncado.addrlen : um ponteiro para um objeto socklen_t que na entrada especifica o comprimento da estrutura sockaddr fornecida e, na saída, especifica o comprimento do endereço armazenado.errno é definido adequadamente. ssize_t recv ( int sockfd, void *buf, size_t len, int flags);sockfd : o descritor de arquivo do soquete a ser recebido.buf : Um ponteiro para um buffer onde a mensagem deve ser armazenada.len : O comprimento em bytes do buffer apontado pelo argumento buf .flags : especifica o tipo de recepção de mensagens. O valor é formado por zero logicamente ou mais dos seguintes valores:MSG_OOB : Processar dados fora da banda.MSG_PEEK : espiar as mensagens recebidas.MSG_WAITALL : aguarde uma solicitação completa, a menos que o soquete não esteja bloqueando.MSG_DONTWAIT : Ativa a operação sem bloqueio; Se a operação bloquear, a chamada falhará com o erro EAGAIN ou EWOULDBLOCK .MSG_NOSIGNAL : Não gera SIGPIPE ao escrever em um tubo sem ninguém para lê -lo.recv() retorna 0. No erro, -1 é retornado e errno é definido adequadamente. ssize_t send ( int sockfd, const void *buf, size_t len, int flags);sockfd : o descritor de arquivo do soquete a ser enviado.buf : Um ponteiro para um buffer que contém a mensagem a ser enviado.len : o comprimento em bytes da mensagem apontada pelo argumento buf .MSG_OOB : Processar dados fora da banda.MSG_DONTROUTE : ROTEGING DE IMPRESSIONAÇÃO, Use interface direta.MSG_DONTWAIT : Ativa a operação sem bloqueio; Se a operação bloquear, a chamada falhará com o erro EAGAIN ou EWOULDBLOCK .MSG_NOSIGNAL : Não gera SIGPIPE ao escrever em um tubo sem ninguém para lê -lo.errno é definido adequadamente. Em geral
Solicitação http
Resposta HTTP
CGI
Teste de estresse