我们可以在 URL 中指定服务名称和传输协议吗?

我们可以在 URL 中指定服务名称和传输协议吗?

URL 有自己的语法

  1. 在 URL 中,我们可以指定主机名或 IP 地址。同样,虽然我们可以指定端口号,但我们可以指定服务名称而不是端口号吗?如果不能,我们如何在需要时指定服务名称(例如,如果我们不记得服务的端口号)?
  2. 我们可以指定吗传输协议在网址中?如果我们无法在 URL 中指定传输协议,那么在需要时如何指定传输协议呢?这样做的需要是一个服务名称可能对应于两个传输协议,例如, /etc/services

    http            80/tcp                  # Hypertext Transfer Protocol
    http            80/udp
    ssh             22/tcp                  # Secure Shell
    ssh             22/udp
    telnet          23/tcp                  # Telnet
    telnet          23/udp
    smtp            25/tcp                  # Simple Mail Transfer Protocol
    smtp            25/udp
    

谢谢。

答案1

您的问题不清楚您将使用这些 URL 做什么。在不知道它们的用途的情况下,我们必须假设它们需要符合标准。如果我们开始使用不符合标准的 URL,则可能会出现问题。

RFC 3986是 URL 的标准。和 ...

如果您需要解决由于端口号不足而导致服务缺失的问题,我见过的最常见的方法是为每个协议/端口对定义一个唯一的方案。

答案2

服务名称是操作系统级别的应用程序级别概念/服务,仅转换为端口号。归根结底,它只是一个被翻译成数字的名字。

然而,RFC RFC 3986 § 3.2.3 不允许这样做(感谢@JdeBP),但如果浏览器/应用程序允许您这样做,您可能会在 URL 中使用服务名称。

大多数常见 URL/浏览器实用程序的解析器将不允许您(正确地)执行此操作。

为了说明这个异常,出于好奇,我们使用文本模式浏览器 lynx,它接受带有服务名称的 URL:

lynx https://www.cnn.com:https

或者

lynx http://www.sapo.pt:http

它可以工作,并且 ip 似乎可以正确浏览相应的网站。根据定义,lynx 实用程序/协议使用 TCP,不会获取服务号 UDP 定义。

相关内容