URL语法
通用URL组件
组件 | 描述 | 默认值 |
---|---|---|
方案 | 访问服务器以获取资源时需要使用那种协议 | 无 |
用户 | 某些方案访问资源是需要使用用户名 | 匿名 |
密码 | 用户名后面可能要包含的密码,中间由冒号(:)分隔 | <E-mail地址> |
主机 | 资源宿主服务器的主机名或点分IP地址 | 无 |
端口 | 资源宿主服务器正在监听的端口号,很多方案都有默认的端口号(HTTP默认的端口号是80) | 每一个方案特有 |
路径 | 服务器上的资源的本地名,由一个斜杠(/)与其他前面的URL组件分隔开来。组件的语法是与服务器方案有关的 | 无 |
参数 | 某些方案会用这个组件来执行输入参数。参数为名/值对,URL中可以包含多个参数字段,它们相互之间以与路径的区域部分之间使用(;)分隔 | 无 |
查询 | 某些方案会用这个组件传递参数已激活应用程序(比如数据库、公告板、搜索引擎以及其他因特网网关)。查询组件的内容没有通用格式。用字符“?”将其与URL的其余部分分隔看来 | 无 |
片段 | 一小片或一部分资源的名字。引用对象时,不会将flag字段传送给服务器,这个字段是在客户端内部使用的,通过"#"将其与URL的其余部分分隔开来 | 无 |
方案指的是这个URL使用的是什么协议,常见的协议有http、https、ftp、ssh等。
主机名一般可以使用IP或者域名来指定。
HTTP的默认端口是80,如果URL中没有指定端口号,那么就是使用的是默认的。
用户名和密码一般使用的比较少。
路径指的是资源字服务器中的位置。
参数在URL中也不常见,常见的是查询参数。
片段:有一些资源类型,比如HTML,除了资源之外,还可以进行进一步的划分。比如,对于一个带章节的文档来说,资源的URL会指向整个文档,但是有时候却想要获取具体的某一个章节。
URL支持使用片段(frag)组件来表示一个资源内部的片段。比如,URL可以指向文档中的一个特定的小结。
片段使用一个“#”将其和前面的其它部分分开。
例如
https://blog.csdn.net/starexplode/article/details/78481029#1-%E5%9C%B0%E5%9D%80%E8%BF%90%E7%AE%97%E7%AC%A6
URL编码
URL中的字符只支持US-ASCII,它并不支持汉字和其它字符,而且,有些URL中还可能会有二进制。所以URL就由于转义序列。通过转义序列,就可以使用US-ASCII字符集的有限子集对字符值或数据进行编码了。
编码机制
为了避开安全字符集表示法带来的限制,人们设计了一种编码机制,用来在URL中表示各种不安全的字符。这种编码机制就是通过“转义”表示发来表示不安全的字符。这种转义法包含一个百分号(%),后面跟着两个表示字符ASCII码的16进制。
示例:
|字符|ASCII码|表示|
|~|126(0x7E)|%7E|
|空格|32(0x20)|%20|
|%|37(0x25)|%25|
字符限制
在URL中,有几个字符被保留起来了,有着特殊的含义,有些字符不在US-ASCII可打印字符集中。还有些字符会与因特网的网关和协议产生混淆。
下表中列出了一些字符,在将其用于保留用途之外的场合时,要在URL中对其进行编码。
字符 | 保留/受限 | |
---|---|---|
% | 保留作为编码中的转义标志 | |
/ | 保留作为路径组件中分隔路径段的界定符 | |
. | 保留在路径中使用 | |
.. | 保留在路径中使用 | |
# | 保留作为分段界定符使用 | |
? | 保留作为参数界定符使用 | |
; | 保留作为查询字符串界定符使用 | |
: | 保留作为方案,用户/口令,以及主机/端口组件的界定符使用 | |
$,+ | 保留 | |
@&= | 在某些方案的上下文有特殊含义,保留 | |
{} | ^~[]' | 用于各种传输Agaent代理。比如网关不安全处理,使用受限 |
<>" | 不安全,这些字符在URL范围之外通常是有意义的,比如在文档中对URL自身进行界定,应该对其进行编码 | |
0x00-0x1F,0x7F | 受限,这些十六进制范围内的字符都在US-ASCII字符集的不可打印区间 | |
>0x7F | 受限,十六进制在此范围内的字符都不在US-ASCII字符集的7位而进制范文内 |
网友评论