微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

domain-name-system – HTTP GET方法如何与DNS协议相关?

我试图了解TCP / IP堆栈中的应用层协议.我知道HTTP和DNS协议都停留在顶层(应用层).因此,当浏览器想要访问资源时,它必须向HTTP服务器发送请求,例如:
GET www.pippo.it/hello.htm HTTP/1.1

按照HTTP协议的规则发出此请求,它使用页面URL而不是IP地址.

我知道将URL转换为IP需要DNS请求.所以我的问题是:HTTP是否调用DNS协议?对我来说似乎不可能,因为两者都是顶层协议(因此DNS无法为HTTP提供服务).以同样的方式,甚至TCP(保持在较低级别)也不能在诸如DNS之类的更高级别协议上请求服务.

那么DNS请求何时发生?谁执行这样的请求?

解决方法

有问题的HTTP请求实际上是 not valid unless browser is talking to intermediary (proxy).

如果浏览器直接与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服务器,而是首先使用本地静态条目.这是可配置的,不一定是真的,但它是我熟悉的主要操作系统的认设置.

原文地址:https://www.jb51.cc/html/229968.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐