Seu desafio é escrever um servidor HTTP code-golf que aceite solicitações GET. Obviamente, ele não precisa ter todos os recursos, mas deve servir arquivos de um diretório.
Regras:
- O servidor HTTP deve escutar na porta TCP 36895 (0x901F)
- Ele deve servir arquivos de
/var/www
sistemas * NIX (por exemplo, Linux) ouC:\hgolf
Windows. - Você pode ignorar todos os cabeçalhos HTTP recebidos, exceto o
GET
próprio. - Se o método HTTP não for GET, você deverá enviar de volta um código de status "405 Não Suportado" e um corpo de "405 Não Suportado".
- Se o arquivo não existir, você deve enviar um código de status "Arquivo 404 não encontrado" e um corpo de "Arquivo 404 não encontrado".
- Se o arquivo existir, mas não puder ser lido por algum motivo, você deve enviar de volta um código de status "500 Server Error" e um corpo de "500 Server Error".
- Se o usuário solicitar
/
ou qualquer outra raiz de diretório existente (por exemplo,/foo/
ondefoo
existe um diretório/var/www/
), responda com uma página em branco. - Sua resposta deve conter pelo menos os cabeçalhos mínimos para permitir que o conteúdo seja exibido no Firefox 8.0 e Internet Explorer 8.0
- Você deve responder com o
Content-Type
conjunto de cabeçalhos, mas você só precisa oferecer suporte a extensõeshtml => text/html
etxt => text/plain
. Para qualquer outra extensão de arquivo, envieapplication/octet-stream
como o tipo de conteúdo. - Seu código deve ser capaz de transferir dados binários e ASCII, embora você não precise explicitamente distinguir entre os dois.
- Você não pode usar bibliotecas de terceiros.
- Você não pode usar classes ou recursos internos projetados para processar solicitações HTTP (por exemplo,
HttpListener
em C #) - Se seu código funcionará apenas em um sistema operacional específico devido às APIs de soquete usadas, indique isso.
As soluções devem incluir uma imagem mostrando a veiculação de uma página HTML em um navegador.
Se você tiver alguma dúvida, não hesite em perguntar! :)
http
módulo no Node.js está ok?
..
no caminho como uma maneira de romper com a raiz do documento definida).