URL全称为Uniform Resurce Locator统一资源定位符,在上世纪90年代互联网刚刚发展起来时,为了解决在多机联网上场景中便于方便查找资源,于是一帮人(当然大部分是美国人)制定了一个标准,为网上各个资源统一定义一个资源位置,方便大家查找资源,该资源位置即为URL,每个资源的URL为全球唯一,后来该标准逐渐纳入到RFC当中,URL的RFC协议总体纲要为RFC1808,该协议对URL的解释如下:

URL不仅代表了资源在网络上的位置,还代表了通过Internet访问该资源的方法

URL格式 

URL的一般格式主要由以下6个部分组成: 

<scheme>://<net_loc>/<path>;<params>?<query>#<fragment>

scheme:代表的准备访问服务器使用的什么协议,在RFC1738中,介绍了其主要协议:

由于该协议出现在1994年,后来有不断出现了新的协议如HTTPS等

在RFC1738中,对Scheme命名规则:允许‘a’~'z',允许使用“+”,“.”,"-"特殊字符,不区分大小写:如“HTTP”和“http”相同:

 “//” net_loc: 代表为网络位置以及登录信息,其格式主要为: 

<user>:<password>@<host>:<port>

user代表用户名, password:为用户密码

host为主机网络地址, port为端口号

那么可能有人会问到,之间在url中输入用户名和密码,岂不是很不安全?

是的,早期的协议确实有很多bug,后来协议演进之后一些敏感信息采用了其他方式进行传递,每个网络服务提供商也都会有默认端口号,现今很多url不在传递密码和端口号,只保留了主机网络地址,如百度:https://www.baidu.com

“/”’path:代表了服务器上资源的路径,用‘/’与前面路径隔开

“;”params:为传递给服务器的一些参数,使用‘,’与前面隔开

"?"<query>:为向服务器发起一些查询请求,使用“?”与前面隔开

#<fragment>:一片段或者一部分资源的名字,一般为客户端内部使用,使用"#"与前面隔开

关键字符和保留字符

RFC1738中规定了一些关键字符和保留字符,不能用于资源路径字符路径,在解析URL时,遇到以下字符代表着一些特殊意义:

字符保留/受限
%保留作为编码字符的转义标志
/保留作为路径组件中分隔路径段的定界符
.保留在路径组件中使用
..保留在路径组件中使用
#保留作为分段定界符使用
?保留作为查询字符串定界符使用
;保留作为参数定界符使用
:保留作为参数定界符使用
:保留作为方案、用户/口令,以及主机/端口组件的定界符使用
$,+保留
@&=在某些方案的上下文中有特殊的含义,保留
{}|\^~[]’ <>”由于各种传输Agent代理,比如各种网关的不安全处理,使用受限不安全;这些字符在URL范围之外通常是有意义的,所以应该对其进行编码
0x00-0x1F,0x7F受限,这些十六进制范围内的字符都在US-ASCII字符集的不可打印区间内。
>0x7F受限,十六进制值在此范围内的字符都不在US-ASCII字符集的7二进制位范围内。

相对和绝对URL

在网络上每个资源(文本,图片,视频等)都有自己的地址,即都有一个自己的绝对URL,但是访问资源时每个资源都使用绝对URL都很长,通常每个人都不会记住那么长的URL,一般只会记住几个关键词。在相同服务器下的资源,一般都使用相对URL,这样就会非常快捷的访问自己所需要的资源。

对于相对URL,都必须有一个称谓Base基础URL的解析,和基础URL组合在一起才能达到访问资源的目的。

RFC1808中,给出了解析相对URL的算法,但是对于爬虫来讲不是重点,不再介绍

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐