Como o título diz, eu gostaria de escrever um servidor HTTP. Minha pergunta é esta, como faço isso? Eu sei que isso soa muito geral e muito "alto nível", mas existe um método para a minha loucura. Uma resposta a essa pergunta deve ser, acredito, independente da linguagem; significando, não importa qual idioma eu use (por exemplo, C, C ++, Java etc.), a resposta deve ser a mesma. Eu tenho uma idéia geral de como isso deve funcionar:
- Abra um soquete na porta 80.
- Aguarde um cliente fazer uma solicitação.
- Leia a solicitação (ou seja, essa pessoa deseja a página "contact-us.html").
- Encontre e leia "contact-us.html".
- Envie um cabeçalho html e envie o conteúdo de "contact-us.html"
- Feito
Como eu disse, acredito que esse seja o processo, mas não tenho 100% de certeza. Isso me leva ao cerne da minha pergunta. Como ou onde uma pessoa encontra essas informações?
E se eu não quisesse escrever apenas um servidor HTTP, e se eu quisesse escrever um servidor FTP, um servidor de bate-papo, um visualizador de imagens etc.? Como uma pessoa descobre as etapas / processos exatos necessários para criar um servidor HTTP funcional?
Um colega de trabalho me contou sobre o cabeçalho html, então eu nunca saberia disso sem ele. Ele também disse algo sobre entregar cada solicitação a um novo tópico. Existe algum grande livro de como as coisas funcionam? Existe algum manual do que é necessário para ser um servidor HTTP?
Tentei pesquisar no Google "como funciona um servidor HTTP", mas as únicas respostas que pude encontrar foram voltadas para o Joe médio, e não para uma pessoa que deseja programar um servidor HTTP.
fonte
Respostas:
Use o RFC2616 , Luke!
Você lê o RFC 2616 no HTTP / 1.1 e segue em frente.
Na verdade, esse foi um projeto no meu terceiro ano na escola de engenharia, e essa é basicamente a descrição do projeto.
Ferramentas
Suas ferramentas são:
Considerações divertidas
Coisas a considerar para se divertir extra:
Diverta-se. É uma coisa muito legal de se ver.
Outras sugestões (mais simples)
Eles são muito mais fáceis de lidar primeiro, e seus RFCs são muito mais fáceis de digerir (bem, o IRC tem algumas partes estranhas, mas o FTP é bastante claro).
Escolha de idioma
Obviamente, alguns detalhes da implementação dependerão muito do idioma e da pilha que você usa para implementá-lo. Abordei tudo isso em C, mas tenho certeza de que pode ser divertido também em outros idiomas (ok, talvez não seja tão divertido, mas ainda assim divertido).
fonte
You still have lots of room for your architecture design, but it's a pretty good and directive spec.
você:yes and no
. Acho que já reduzimos o RFC que não era tudo. E acho que cabe ao OP descobrir essas coisas, em vez de apontá-las diretamente mais do que já fiz nas seções "considerações extras" e outras coisas. Faz parte da diversão.Cada um dos protocolos usados na internet é especificado em um ou mais documentos públicos chamados RFCs. Todos os RFCs atuais podem ser encontrados em http://www.rfc-editor.org/ , que também possui uma função de pesquisa decente.
O protocolo HTTP (versão 1.1), por exemplo, é especificado no RFC2616 e o protocolo FTP é especificado no RFC959 .
Conforme especificação, os RFCs são, na minha opinião, muito bem legíveis.
fonte
In 2014, RFC2616 was replaced by multiple RFCs (7230-7237).
. Então, como encontrar as RFCs atualizadas, se estiverem presentes? Devo verificar aObsoleted by
lista?