Portanto, talvez esteja faltando algo simples aqui, mas não consigo encontrar uma maneira de obter o nome do host do qual um objeto de solicitação para o qual estou enviando uma resposta foi solicitado.
É possível descobrir qual nome de host o usuário está visitando atualmente no node.js?
request.headers.host
- obrigado!Respostas:
Se você estiver falando de uma solicitação HTTP, poderá encontrar o host da solicitação em:
Mas isso depende de uma solicitação recebida.
Mais em http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest
Se você está procurando informações nativas / da máquina, tente o objeto de processo.
fonte
request.headers.host
retornoshttp://127.0.0.1
, mas não um nome de domínio servidor de produçãoreq.headers.host
é fornecido pelo usuário. Eu posso criar um pedido em 1 linha de python e enviar-lhe um pedido sem que o campo tornando o seu código de acidenteVocê pode usar o módulo os:
Vejo http://nodejs.org/docs/latest/api/os.html#os_os_hostname
Ressalvas:
se você puder trabalhar com o endereço IP - as máquinas podem ter várias placas de rede e, a menos que você especifique, o nó escutará todas elas, para que você não saiba em qual placa de rede a solicitação entrou, antes de entrar.
Nome do host é um problema de DNS - Não esqueça que vários aliases de DNS podem apontar para a mesma máquina.
fonte
hostname
comando que deve ser um nome DNS válido, mas não é necessário. Por exemplo, no OS X, você obterá nomes como omy-machine.local
que não pode ser resolvido com o DNS. Para descobrir o IP externo da máquina, você precisará acessar um serviço que executa essa função ou usar o protocolo STUN para descobrir.Aqui está uma alternativa
Leia sobre isso no Express Docs .
fonte
Se você precisar de um nome de domínio totalmente qualificado e não tiver uma solicitação HTTP, no Linux, poderá usar:
fonte
hostname
de comando no Windows (mas você invocá-lo sem parâmetros)Antes de tudo, antes de fornecer uma resposta, gostaria de ser sincero sobre o fato de que, confiando nos cabeçalhos, você está abrindo a porta para vulnerabilidades de segurança, como phishing. Portanto, para fins de redirecionamento, não use valores dos cabeçalhos sem antes validar a URL autorizada.
Em seguida, o nome do host do sistema operacional pode não corresponder necessariamente ao nome DNS. De fato, um IP pode ter mais de um nome DNS. Portanto, para fins de HTTP, não há garantia de que o nome do host atribuído à sua máquina na configuração do sistema operacional seja utilizável.
A melhor opção em que posso pensar é obter o IP público do ouvinte HTTP e resolver seu nome via DNS. Veja o
dns.reverse
método para mais informações. Mas, novamente, observe que um IP pode ter vários nomes associados a ele.fonte