O principal objetivo deste laboratório é criar um servidor Web CGI HTTP com base no RFC/1945. O servidor é criado na programação e abstração do soquete C aprendidas até agora no INET 4021 - Programação de rede.
Além disso, o servidor deve ser eficiente em relação à velocidade e alocação de recursos.
Nosso servidor usa o CGI como uma abstração para obter entradas de um formulário HTML e depois retornar a saída. O cliente não tem idéia de que o CGI está lá, mas está feliz quando recebe uma resposta, independentemente de quem é.
Quanto ao nosso algoritmo, o servidor recebe a entrada e o analisa para encontrar se é uma solicitação de postagem/obtenção e envia os dados ao CGI para processamento.
/CGI -BIN - Isso contém nossos arquivos CGI usados para lidar com solicitações de postagem e obtenção (onde reside o servidor da web executável).
Quando um cliente envia uma solicitação POST/GET para o servidor, o servidor chama o executável do CGI para lidar com a solicitação. O principal uso para isso é permitir que o executável lide com o trabalho, enquanto o servidor o passa e pode lidar com novas solicitações. Este é um bom uso da alocação de recursos e ajuda a apoiar mais usuários simultaneamente.
/conf - a pasta de configuração contém arquivo httpd.conf, que é um arquivo de configuração do servidor. Ele declara a quantidade de usuários simultâneos, a localização do conteúdo raiz, a localização do índice e a porta a ser executada.
/Conteúdo - Todos os .html, .gif, .jpg (conteúdo) residem nesta pasta. Quando o index.html é recebido, ele envia solicitações para todos esses arquivos. Esses arquivos são usados para criar a página da web exibida no navegador do cliente.
/Logs - Esta pasta contém os arquivos de log para todos os comandos de acesso, bem como erros. O padrão Out será destinado ao log de acesso e todos os outros logs de erros vão para o log de erros.
/SRC - É aqui que reside todo o nosso código -fonte. Esta é essencialmente a pasta em que o servidor está localizado.
Index.html - Índice de diretório da web servidor
Para compilar o GET e POST CGI, altere para o diretório /src . Compilar o arquivo C. Isso pode ser feito por
gcc POST.c -o ../cgi-bin/POST.cgi && gcc GET.c -o ../cgi-bin/GET.cgi
Para testar o servidor, vá para o diretório /src . Compile o arquivo C e execute -o. Isso pode ser feito por:
gcc server.c && ./a.out
O servidor será executado com base no conteúdo especificado no arquivo de configuração. Se inalterado, o terminal retornará:
Number of simultaneous connections: 10
Root directory (to start looking for HTML files): ../contents/
Index filename (if none given): /index.html
Port to run on server: 8080
Agora, usando um navegador da web, digite "http: // localhost: 8080/". Isso carregará o arquivo index.html e exibirá a página da web. Além disso, você pode carregar certos arquivos fazendo "http: // localhost: 8080/nome do arquivo". Se o arquivo existir, ele será exibido (mostrado abaixo). Caso contrário, haverá um Error 404 - File Not Found .

Antes de começarmos, é importante observar que, quando o servidor envia uma mensagem para o cliente do navegador da Web, ele é precedido por um cabeçalho HTTP. Um exemplo disso é:
HTTP/1.0 404 Not Found
Content-Type: text/plain
Content-Length: 25
Connection: close
Last-Modified: Mon, 23 Mar 2020 02:49:28 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Date: Mon, 23 Mar 2020 04:49:28 GMT
HTTP 404 - File not found
Isso está enviando um erro de volta ao cliente HTTP porque o arquivo solicitado não pode ser encontrado. Outros formulários usam um "OK 200 OK", "Erro de 500 do servidor interno" e "501 não implementado", em vez de "404 não encontrado", mas mantenha o mesmo formulário. Você edita a segunda linha com base no conteúdo que está enviando. Você pode enviar dados após duas novas linhas.
Quando um cliente solicita um arquivo, o servidor recebe uma solicitação GET. Cada solicitação pode ter muitas chamadas iterativas para o servidor para obter arquivos de adição, como a solicitação index.html para solicitar outras imagens. O servidor envia a solicitação para o CGI (Common Gateway Interface). O objetivo do uso do CGI é para interações dinâmicas da Web, como um formulário, adicionando aplicativos de back -end que recebem dados (entradas) de um formulário HTML. Outro tipo de solicitação é uma postagem. É quando o cliente envia dados para o servidor. Forneceremos um exemplo de cada um.
Post Exemplo: Se você acessar "http: // localhost: 8080/form.htm", poderá enviar uma mensagem de postagem para o servidor. O formulário será enviado e tratado pelo servidor da Web CGI executável como uma solicitação de postagem. Nosso formulário de exemplo assume duas entradas de palavras, envia o formulário e os dados para o CGI e o CGI envia de volta o formulário e o conteúdo (que é a string concatenada). Este é um exemplo de como o CGI lida com solicitações de postagens.
Obtenha um exemplo: é quando o cliente está tentando obter um arquivo do servidor. Isso acontece com frequência, especialmente quando o arquivo <index.htm> é solicitado. O CGI tenta encontrar o arquivo, se não puder, envia o erro 404 não encontrado, encontrado acima, para o cliente.
Se o arquivo for encontrado, o servidor enviará uma solicitação de volta, como
HTTP/1.0 200 OK
Content-Type: image/gif
Content-Length: 1231
Cache-Control: no-cache
Connection: Keep-Alive
Last-Modified: Mon, 23 Mar 2020 02:49:28 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Date: Mon, 23 Mar 2020 04:49:28 GMT
CONTENT
O primeiro pedaço de texto é o cabeçalho HTTP. O conteúdo seria substituído pelo conteúdo do arquivo. O navegador exibiria esse conteúdo. É assim que as linhas de CGI recebem solicitações.
Supondo que o cliente seja o usuário e o administrador seja o servidor ...
Admin - O objetivo deste projeto para administradores é ver como lidar com solicitações de postagem e obtenção em um servidor da web executável. A programação do servidor também ajuda a entender como enviar cabeçalhos HTTP e se comunicar com uma página da Web, além de navegar para arquivos e enviá -los para uma página da Web.
Usuário - O objetivo deste projeto para os usuários é aprender a navegar nas páginas da web e o que certos erros significam quando recebidos. Por exemplo, se tentar carregar um arquivo do servidor que não existe, haverá um erro de 404 arquivo não encontrado.