当涉及到斜杠后的地址时,DNS 如何工作?

9 networking dns ip-address nameserver

在 Wireshark 中查看我的网络适配器的 DNS 和 SNI,我看到的只是域名和子域名,但斜杠后面没有任何内容,例如没有提及example.com/pagetwitter.com/mypage

所以,我想知道,应用程序或浏览器如何知道在正斜杠之后要访问哪个页面?

浏览器或应用程序是否只需要知道/查询主域或子域的IP地址,然后在其后面简单地添加斜杠?比如192.168.1.1/mypageTwitter?

我认为这是可行的,但如果斜杠后面的地址有不同的 IP 地址怎么办?例如,Twitter.com位于192.168.1.1Twitter.com/mypage位于192.168.2.1?这样做甚至是主流吗?

最后但也是最重要的一点是,如果 DNS 请求/响应和 TLS SNI 字段仅包含网站的子域和主域,这是否意味着我的 ISP 无法确切知道我访问了哪些 Twitter 或 Instagram 页面,只能看到我访问 Twitter.com 和 Instagram.com,只要连接是 HTTPS 即可?

PS 请考虑仅在端口 53 上使用纯文本 DNS,根本不考虑 DoH 或 DoT 等安全 DNS。

更新:阅读此服务器故障帖子中所选答案下的评论回答了我的第一个问题。

dav*_*dgo 42

当涉及到处理 http(s) 请求时,DNS 所做的就是将域名转换为 IP 地址。然后,Web 浏览器连接到该 IP 地址并请求资源(例如斜杠后面的部分)- 不涉及 DNS。

您认为 twitter.com 位于 192.168.1.1 但 twitter.com/mypage 位于 192.168.2.1 的说法是错误的。从 Web 客户端 POV 来看,twitter.com 和 twitter.com/mypage 都存在于同一 IP 地址上。twitter.com 的服务器可以充当反向代理并从 192.168.2.1 获取最终数据,但它将通过浏览器和 192.168.1.1 之间建立的安全连接来路由请求。

DNS 和 SNI 几乎没有关系。SNI由网络服务器协商,不关心DNS(暂时忽略CAA记录等,它们是相关的但不是SNI并且不普遍存在)。事实上,将一个网站移动到另一台服务器上的另一个 IP 地址 - 但请确保您也移植了证书,修改您的主机文件以指向新的 IP 地址,即使您覆盖了该网站,您的 HTTPS 站点也将正常工作。域名系统。


Vil*_*lx- 39

添加到其他答案:这里是对 URL 的快速剖析:

https://www.example.com:99/some/path?a=b&c=d#1223
Run Code Online (Sandbox Code Playgroud)
  • https://- 协议又称为浏览器与网络服务器对话的“语言”。
  • www.example.com:99- 地址,进一步分为两部分:
    • www.example.com- 主机名又名“域名”。连接前浏览器会将其转换为 IP 地址
    • :99- 浏览器用于建立网络连接的 TCP 端口号。这部分通常被省略,然后浏览器使用所选协议的默认端口号(80for http; 443for https
  • /some/path?a=b&c=d- “资源路径”和“查询字符串” 。浏览器在建立连接后将所有这些内容一起发送到服务器(对于包含所有 TLS 协商的 HTTPS,因此会加密发送)。除了确保它不包含非法字符之外,浏览器不会修改此文本。它实际上可以是任何东西,这只是一个惯例,第一部分是“资源”的路径,第二部分是某种参数。实际上,您几乎可以发送任何内容,并且服务器可以随意处理它。
  • #1223- 这称为“片段”,浏览器根本不会将其发送到服务器。这是 100% 供客户端使用。例如,如果 URL 生成 HTML 页面,浏览器将尝试查找具有此 ID 的 HTML 元素并滚动到它。它还可以通过浏览器中运行的 JavaScript 进行访问(然后浏览器可以用它做任何它想做的事情)。但它永远不会被发送到任何地方。

因此,正如您所看到的,确实只有域部分在 DNS 系统中进行查找。并且不能根据路径使用不同的IP地址。

  • 客户端还可以使用非 HTML 内容的片段,例如 PDF 页码。 (2认同)
  • 您可能需要添加一点,当使用“https”时,路径和查询字符串是加密的,除了客户端和服务器之外,任何人都无法使用。并且答案也被加密。 (2认同)

use*_*686 19

\n

如果斜杠后面的地址有不同的 IP 地址怎么办?

\n
\n

它实际上永远不会有不同的 IP 地址。HTTP URL 语法无法实现这一点;它定义只有斜线之前的部分是“权限”(要连接的服务器的域名或IP地址) \xe2\x80\x93 同一服务器始终负责其域下的所有HTTP路径。

\n

(实际的服务器可以以任何它喜欢的方式处理不同路径的 HTTP 请求,例如,它可以在本地提供某些路径,同时将其他路径代理到不同的后端主机,但这都是客户端不可见的服务器端逻辑。)

\n