什么是URL中的scheme和protocol,它们有什么区别?

53
我希望有人能够向我澄清URL中协议(protocol)和方案(scheme)之间的技术区别(或者确定可以放置在方案中的其他项目?)。起初,我认为它们是相同的,方案只是另一个名称。您可以在维基百科文章中找到有关方案的引用。尽管根据这里的答案,方案不被视为协议,因为没有传输层或编码。这是定义它们之间区别的正确方式,还是有其他更多的因素使得这两个不同吗?我如何明确知道自己正在处理协议还是方案?(或者除协议外还有其他符合方案要求的内容?因为似乎将协议放置在URL的方案部分。)
5个回答

40

我理解这两个术语有重要的重叠。 协议 是信息传输的约定方法,方案 是URL使用的标识符,以表达特定资源应在何种协议上提供服务。简而言之,方案只是协议的标识符。

例如

在链接https://example.com中,https方案,告诉浏览器(或请求该资源的人)将在Hypertext Transfer Protocol Secure(HTTPS)上为example.com上的资源提供服务,这是一种“协议”类型。

方案<>协议

ftp <> File Transer protocol
http <> Hypertext Transfer Protocol
https <> Hypertext Transfer Protocol Secure

好的,谢谢你的回答。我只想澄清一下你所说的mailto:是什么意思,当你说“简而言之,方案只是协议的标识符。”时,这是否意味着“mailto:”是一个具有不同名称的协议的标识符,还是mailto-scheme的操作/功能完全不同,根本没有启动任何协议? - Jonathan002
@Jonathan002 啊,我刚刚进行了编辑,因为我实际上是错误的。有一个mailto协议,而且方案语法也是mailto。所以在这种情况下,协议名称与方案语法相同。 - clayjones94
10
大多数URI方案最初设计用于与特定协议一起使用,通常具有相同的名称,但语义上与协议不同。例如,scheme http 通常用于使用 HTTP 与 Web 资源进行交互,但 scheme file 没有协议。 - YouHaveNoSkill
没有mailto协议,而是SMTP。这是方案和协议不同的一个很好的例子。文件方案也是如此,它对应于没有协议,只是指向本地文件。 - Alan Evangelista

15

方案和协议并不相同,因此从技术上回答您的问题,在URL中并没有协议,只有方案。

要知道协议是什么,您需要检查请求。

考虑您的URL是(引用自@clayjones94的答案):

https://example.com

而您的HTTP请求(片段)开始于:

GET / HTTP/1.1
Host: example.com

...

https将是方案

HTTP/1.1将是协议

人们混淆或交替使用它们的原因是因为他们基于方案推测协议, 但事实并非如此,因为您可以使用HTTP/1.1或HTTP/2协议之一向使用https方案的https://example.com发送请求。


那么您的意思是,方案是一组具有相同名称但可能具有不同版本的协议的标识符。 - Alan Evangelista
1
不,简而言之,我是在说这两者不同也没有关联,我之所以这么说是因为其他答案试图将它们联系起来,而我在我的回答中给出了不能这样做的原因。 - Professor of programming
1
我认为将协议与方案混合在一起是很自然的,因为在大多数人使用的URL中,方案和协议或网络协议族(例如http、ftp、ssh、ldap)之间存在一对一的关系。我认为其他反例,其中方案与网络协议名称没有任何关系(例如文件、mailto),会使这两个概念之间的区别更加清晰。 - Alan Evangelista

8
网络协议是一种传输数据的通信规则系统。而方案是针对数据结构的系统计划。
URI 不包含协议但包含方案[1]。方案可以与协议相关联,但不必须。例如,http: 方案与 HTTP/1.0 或 1.1 协议相关联[2],但 file: 方案与任何协议均无关系。 Http 是一个既是方案又是协议的表示,而 file 是一个方案但不是协议。
[1] https://en.wikipedia.org/wiki/Uniform_Resource_Identifier; 29/01/21
[2] https://www.w3.org/2001/tag/doc/SchemeProtocols.html#useNaturalProtocol; 29/01/21

3

我喜欢将“scheme”一词视为URL中指示“协议”的区域。

 the scheme
 ┌───┐
 https://www.google.com/
 └───┘
 the specific protocol

1
这在技术上并不正确。":"是一个分隔符,而不是方案本身的一部分,"//"表示授权组件的开始。正如您可以从正式定义中看到的那样,甚至不允许在方案中使用":"和"/"字符,并且没有任何官方注册的方案包括它们。在这种情况下,您所指定的协议也是该方案。 - Todd Menier

1
如果一个协议被描述为“scheme+version”,那么如果该方案是HTTP,则有2个协议HTTP1.1和HTTP2.0。因此,简而言之,协议可以模糊地称为方案的特定版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接