根据the accepted answer,第二步是当DNS与ISP服务器通信以获得主机名的IP地址时.
DNS: “Right… wait a sec,I’ll ask the ISP servers. Ok,it looks like
157.166.226.25.”
我碰巧读了this answer,说,
CLIENT running browser asks DNS Server using UDP protocol for A record of
www.pippo.it
on client it is the operating system that does resolving part and
talks back to browser,browser never talks to DNS directly,rather
through OS by invokinggethostbyname()
and on Linux resolving precedence is defined by/etc/nsswitch.conf
因此,如果我使用防火墙规则阻止我的机器中的端口53的所有出站流量,这是否意味着我根本无法解析任何主机名?
我认为不应该是这样的原因,这就是为什么我们有/etc/nsswitch.conf文件(在Linux机器上,虽然类似的概念也可能出现在其他操作系统中).该文件了解主机数据库,其中gethostbyname()和相关函数使用主机名和编号.
有人可以澄清我的理解是否正确或是否有误解?
解决方法
因此,只要您知道IP地址,即使您的主机文件中没有名称,因此Internet也能正常工作,您甚至可以访问没有DNS的网站.
现在,为了反驳我刚才所说的一点,因为你的问题是关于HTTP的,事实是如果你试图通过IP地址直接访问它们,一些网站将无法工作.
这可能有很多原因,但其中最常见的一个是Web服务器实际上在一个IP上托管了许多不同的网站,然后根据请求的主机名将请求区分到这些站点.
这是通过添加Host:标头作为HTTP请求的一部分完成的.浏览器使用您在地址栏中提供的名称在请求期间填写此标题,但严格来说,这与DNS无关.
另一种通过IP浏览可能有问题的方法是在HTTPS站点上,因为证书是发给某些主机名的.这不会阻止它们工作,但浏览器无法验证证书,因为名称不匹配,您将收到警告.