URL协议详解

我们目前使用的诸如:http://www.baidu.com或者ftp://192.168.1.1等链接,都是URL标准的一个实例。URL全称Uniform Resource Locators(通用资源定位器),标注名称为rfc1738

URL的组成部分

1
<scheme>:<scheme-specific-part>

URL被冒号分成了两部分,前面是scheme(方案),后面是scheme的描述部分

scheme

scheme只能由以下元素组成:

1
2
3
a-z(不区分大小写)
数字
字符: 加号+ 句号. 连字符-

shceme目前有这些类型:

1
2
3
4
5
6
7
8
9
10
11
12
ftp File Transfer protocol(文件传输协议)
http Hypertext Transfer Protocol(超文本传输协议)
gopher The Gopher protocol(Gopher协议)
mailto Electronic mail address(电子邮件地址)
news USENET news(USENET新闻)
nntp USENET news using NNTP access
(使用NNTP访问的USENET新闻)
telnet Reference to interactive sessions
(交互式会话访问)
wais Wide Area Information Servers(广域信息服务系统)
file Host-specific file names(特殊主机文件名)
prospero Prospero Directory Service(prospero目录服务)

当然,上述的scheme大部分是应用非常广泛的,我们可以自定义scheme,只要解析器支持即可,比如我们公司就根据URL设计了一条App跳转专用的URL,方便服务器分发跳转路径。

scheme描述部分

scheme的描述部分也可以拆解成以下的结构:

1
<user>:<password>@<host>:<port>/<url-path>

根据方案的不同,这些部分是可以部分省略的,比如http通常不需要user和password

我们来依次看这些组成部分:

user

这个比较好理解,就是用户名,没有则省略

password

用户密码

host

host(主机)是一个IP地址,由四组十进制数字以.分割组合而成。现在很多对客的地址都是用了域名,然后再通过DNS解析.DNS可以理解为将难以记住的ip地址和单词等组成的域名做映射,从而方便用户的使用。记住https://www.baidu.com可比记住192.292.22.22容易多了。很多的公司在使用的时候也会做DNS优化,即客户端等发出请求的时候,直接向对应的ip发送,从而节省DNS解析的时间,加快用户访问速度,有兴趣的可以网络搜索下。

port

port(端口)是用来区分不同的网络服务的,从而实现在一个IP的基础上,提供多个网络服务。

url-path

url路径提供了如何对特定资源访问的详细信息,一般都是文件夹的路径

URL编码

URL会使用编码,因为很多字符是不安全的,比如空格,在被转录或者排版的时候,可能会被忽略。”<”和”>”也是不安全的,因为他们被用来作为URL在文本中的分割符。#,/,~,[,]等也都会在不同的场景下给URL的解析带来问题,所以要对不安全的字符进行编码。通常是进行ecode。

总结,本文介绍了URL的组成部分,各部分的用法和使用场景,URL的编码原因等知识。

参考文档: