Como faço para o protocolo reconhecer o nome do host?

10

Esta é uma pergunta canônica sobre reconhecimento de nome de host e proxy.

Eu sei que alguns protocolos têm reconhecimento de nome de host; isto é, quando eu me conecto ao servidor HTTP, www.example.comele sabe que quero www.example.como serviço HTTP, não o serviço www.example.net, mesmo que esteja no mesmo endereço IP. Como posso fazer isso para o protocolo foo ?

(Nota temporária: esta pergunta aparece de acordo com esta meta-discussão .)

Chapeleiro Louco
fonte

Respostas:

14

Para entender o que está acontecendo, você precisa saber um pouco sobre o DNS.

Quando um cliente deseja se conectar a um serviço em um determinado host, ele procura o nome do host por meio de sua infraestrutura DNS local e recebe um endereço IP em resposta. Em seguida, ele se conecta a esse endereço IP e solicita o serviço da maneira prescrita pelo procotol criado para implementar.

Em alguns casos, parte desse procotol envolve um segundo envio do nome do host procurado originalmente, que nesse caso é enviado ao servidor e não à infraestrutura DNS. No caso do HTTP, isso foi adicionado como parte do HTTP / 1.1, na RFC 2616 ; no caso do HTTPS, isso foi implementado como SNI ( Server Name Indication ) na RFC 4366 ; e no caso do FTP, isso foi adicionado pelo HOSTcomando, na RFC 7151 (mas veja mais adiante). Se esse segundo envio não ocorrer, o servidor não terá como saber qual nome de host o cliente forneceu ao DNS local para obter o endereço IP do servidor.

Observe que em todos os casos foi necessária uma alteração no protocolo para fazer esse segundo envio e, assim, tornar a interação cliente-servidor com reconhecimento de nome de host. Depois que o protocolo foi alterado, o código do servidor teve que ser atualizado para implementá-lo. E, finalmente, os clientes precisavam ser atualizados para conversar com o novo protocolo com os servidores. Esse último passo pode ser particularmente lento; no caso do SNI, o Internet Explorer no Windows XP nunca o implementou; portanto, não foi possível confiar no protocolo enquanto ainda houvesse um número significativo de usuários do IE no XP, e levou cerca de dez anos para que morrer e / ou obter atualizações de que o SNI é implantável de maneira confiável.

É isso que é necessário para tornar um protocolo que não reconhece o hostname. É não um cenário de bandeira ou configuração simples mudança. Temos algumas respostas específicas de protocolo que lidam com o estado de coisas e possíveis medidas de mitigação, para esse protocolo em particular: para SSH (e, portanto, também SFTP) e para FTP (o que indica que o HOSTsuporte ao FTP está atualmente no patchy) -support support e, portanto, ainda não pode ser invocado).

A resposta curta é que, se o seu protocolo não implementa atualmente reconhecimento de host, com bom suporte entre clientes e servidores, esqueça: não é algo que você possa fazer.

Chapeleiro Louco
fonte
6
Acho que moderaria essa resposta com o fato de que alguns protocolos são para produtos novinhos em folha ou são locais o suficiente para que uma empresa controle todas as instâncias de servidores e clientes. Nesses casos, simplesmente adicionar comandos ou pacotes de nome de host é muito simples e muito fácil de implementar. Você descreve a dificuldade em adicionar qualquer novo recurso a um protocolo existente que já esteja sendo amplamente utilizado por muitos fornecedores.
JPhi1618
4
@ JPhi1618 Eu ouvi você, mas, na minha opinião, qualquer "protocolo" criado e implementado por uma única empresa, e não incorporado em uma RFC, não é um protocolo; é apenas uma decisão de engenharia interna e não tenho interesse em produtos proprietários. Como você ressalta, o fornecedor pode mudar instantaneamente as coisas para implementar o reconhecimento do nome do host, se assim o desejar; mas desde que ninguém outro do que o fornecedor pode fazer isso, eu não vejo como ele é de muito interesse para o OP.
MadHatter
Penso que a questão relevante é se você está projetando um novo protocolo ou perguntando como alterar um protocolo existente.
Barmar 17/10
Um protocolo proprietário ainda é um protocolo.
Barmar 17/10
@ Barmar provavelmente não é uma boa discussão para entrar aqui. Esta pergunta é sobre a alteração de protocolos existentes e, como observei anteriormente, se a decisão / protocolo de engenharia proprietária bazpuder ser alterada apenas por seu proprietário e único implementador, a única maneira de torná-lo com reconhecimento de nome de host é apelar para o proprietário. Isso não é uma resposta interessante do SF e, além disso, não está (na minha opinião) no tópico. " Como faço para projetar um protocolo com reconhecimento de nome de host " é outra questão completamente, e não uma que estou interessado em fazer.
21917 MadHatter