Alguns servidores da Web, quando acessados usando seu endereço IP, retornam um erro que não é permitido o acesso direto ao endereço IP.
Há algum tempo que me pergunto como isso funciona. Quero dizer, o navegador nem sempre resolve o endereço IP e se conecta a ele? O "acesso direto ao endereço IP" não está pulando o DNS? Como o servidor remoto sabe que você pulou o DNS?
networking
dns
apache-http-server
ip
http
Joseph A.
fonte
fonte
Respostas:
Para responder à sua pergunta de como ele sabe , isso tem a ver com o que o navegador envia ao servidor.
Você está certo de que o sistema sempre o resolve para um endereço IP, mas o navegador envia a URL que você tentou acessar no cabeçalho HTTP.
Aqui está um exemplo de cabeçalho que eu achei on-line, modificado para parecer que você usou o Firefox no Windows e digitou
apple.com
na barra de endereço:Aqui está a aparência do cabeçalho se você usasse o endereço IP:
Ambos seriam enviados para o mesmo endereço IP em um soquete, mas o navegador informa ao servidor o que ele acessou.
Por quê? Como os servidores da Web com o mesmo endereço IP podem hospedar vários sites e fornecer páginas diferentes para cada um. Ele não pode distinguir quem deseja qual página por endereço IP, porque todos eles têm o mesmo - mas pode distingui-los pelo cabeçalho HTTP.
fonte
host
cabeçalho. Veja este exemplo .Com o protocolo HTTP 1.1 (a versão anterior do HTTP 1.0 fica obsoleta há algum tempo, portanto é improvável que seja usada por qualquer versão recente de um navegador), o
host
cabeçalho foi introduzido. Para HTTP 1.1, é uma linha de cabeçalho necessária que deve ser emitida por um navegador . O nome do domínio é incluído pelo navegador nessa linha, por exemploHost: example.com
. Portanto, o servidor web sabe qual site o navegador deseja acessar a partir dessa linha. Como um servidor da web pode suportar dezenas de sites, essa linha é importante para determinar em qual site a página solicitada reside. Supondo que o navegador deseje acessar a página inicial de um site em example.com, ele emite a seguinte linha para o servidor quando ele se conecta ao servidor:Essa linha especifica que o navegador deseja obter o documento raiz, ou seja, "/" para o site. Se você quisesse acessar
/somedir/testpage.html
,GET /somedir/testpage.html
estaria na linha "obter". A linha será seguida pela linha abaixo:Portanto, se o servidor da Web suportar os sites example.com, someothersite.com, yetanothersite.org, etc., ele saberá que deve retornar a página principal de example.com. Se não receber essa linha ou se não houver um nome de domínio listado na
Host
linha, não saberá qual página inicial do site deve ser retornada. Portanto, ele pode retornar uma mensagem de erro ou retornar a página inicial de um site "padrão" para o servidor.Você pode emitir os mesmos comandos que um navegador emite usando o protocolo telnet , por exemplo, a
telnet example.com 80
partir de um prompt de shell do Linux ou de uma janela do Apple OS X Terminal , para conectar-se à porta HTTP padrão, porta 80 - consulte Testando o acesso a um site usando PuTTY para obter as etapas para fazer isso com o PuTTY em um sistema Windows.fonte
Isso ocorre devido ao
Host:
cabeçalho HTTP. Isso é bastante útil para hospedar vários sites no mesmo endereço IP. Por exemplo, http://www.k7dxs.net/ e http://www.philipgrimes.com/ estão no mesmo endereço IP. No entanto, por causa doHost:
cabeçalho, eles podem mostrar dois sites diferentes.Para HTTPS, como @Toothbrush apontou, eles usam a indicação de nome de servidor TLS porque o cabeçalho do host faz parte da solicitação criptografada e o servidor não sabe qual certificado oferecer sem isso.
Experiência divertida: obtenha dados de adulteração para Firefox (não consegui encontrar um equivalente para o Chrome) e comece a adulterar. Abra http://slipstation.com/ e edite o
Host:
cabeçalho na solicitação para ser http://www.zombo.com/ . Você verá um site possivelmente familiar, onde tudo é possível.fonte
O servidor da web pode ser configurado para aceitar apenas conexões com um domínio ou subdomínio específico. Pode estar hospedando vários domínios.
O que o servidor da web faz quando um endereço IP direto é usado é configurável. No caso do Apache, por padrão, ele irá para o primeiro vhost nomeado dentre os sites ativados, que são classificados alfa-numericamente.
Esta é a parte mais relevante da documentação do Apache que encontrei, após uma rápida pesquisa:
https://httpd.apache.org/docs/current/vhosts/name-based.html
fonte