GET www.pippo.it/hello.htm HTTP/1.1
按照HTTP协议的规则发出此请求,它使用页面URL而不是IP地址.
我知道将URL转换为IP需要DNS请求.所以我的问题是:HTTP是否调用DNS协议?对我来说似乎不可能,因为两者都是顶层协议(因此DNS无法为HTTP提供服务).以同样的方式,甚至TCP(保持在较低级别)也不能在诸如DNS之类的更高级别协议上请求服务.
那么DNS请求何时发生?谁执行这样的请求?
解决方法
如果浏览器直接与Web服务器通信,您的示例将更像是以下内容:
GET /hello.htm HTTP/1.1 Host: www.pippo.it
现在来看一下OSI层模型
所以我们有3个系统在起作用.
>运行浏览器的客户端
>服务该站点的Web服务器
> DNS服务器知道站点的IP地址
涉及的议定书是;自下而上(最低相关设置为OP)
> IP
> TCP,UDP
> HTTP,DNS
HTTP通信是通过TCP协议完成的,TCP通信是基于IP协议的
在这种情况下,DNS是通过UDP协议完成的,而UDP协议是在IP协议之上.
通讯顺序简而言之:
>运行浏览器的CLIENT使用UDP协议向DNS服务器请求记录www.pippo.it
1.1.在客户端上,它是解析部分并回访浏览器的操作系统,浏览器从不直接与DNS通信,而是通过调用gethostbyname()或更新的getaddrinfo()通过操作系统.在Windows中,操作系统解析地址的顺序可能由类似于this,关于Linux解析优先级由/etc/nsswitch.conf定义
> DNS服务使用UDP协议响应具有记录/ IP地址的CLIENT(如果存在)
> CLIENT打开与WEB服务器端口80的TCP连接,并写入以下文本
HTTP请求:
GET /hello.htm HTTP/1.1 Host: www.pippo.it
您可以通过在控制台/ cmd提示符下执行此类操作来模仿相同的操作
> telnet www.pippo.it 80 Trying 195.128.235.49... Connected to www.pippo.it. Escape character is '^]'. GET /hello.htm HTTP/1.1 Host: www.pippo.it
接下来是两条空行.对于此Web服务器将响应,如果请求的内容存在,它将打印到屏幕,并且在浏览器的情况下,该超文本实际上由浏览器解析并且所有标签,链接,脚本和图像在我们称为网页的情况下呈现.
实际上还有一些细节,例如如果您已访问某个域,则浏览器会缓存IP地址,因此可能不需要进行DNS解析.此外,现代浏览器可能会在您真正需要之前尝试解析(DNS prefetching)以加快您的浏览体验.
此外,您的计算机可能在主机文件中有静态记录,并且不会联系任何DNS服务器,而是首先使用本地静态条目.这是可配置的,不一定是真的,但它是我熟悉的主要操作系统的默认设置.