介绍
URL(Uniform Resource Locator 统一资源定位符)是万维网上资源的地址。url有一个定义良好的结构,万维网的发明者蒂姆·伯纳斯·李在RFC 1738中阐述了这个结构。
每个URL都确认了一个通用语法,看起来像这样:
scheme:[//[user:password@]host[:port]]path[?query]
URL语法的某些部分,如[user:password@],由于安全原因,已被弃用,很少使用。下面是一个URL的例子,你经常在互联网上看到:
https://www.google.com/search?q=hello+world#brs
对于定义统一资源定位器(url)语法的初始RFC,已经做了许多改进。目前定义通用URI语法的RFC是RFC 3986。这篇文章包含了来自最新RFC文档的信息。
URL Encoding (Percent Encoding)
URL由属于US-ASCII字符集的一组有限字符组成。这些字符包括数字(0-9)、字母(a-z, a-z)和一些特殊字符(“-”,“。”,“_”,“~”)。
ASCII控制字符(例如退格、垂直制表符、水平制表符、换行符等),不安全字符如空格、\、<、>、{、}等,以及ASCII字符集以外的任何字符都不允许直接放置在url中。
此外,url中还有一些具有特殊含义的字符。这些字符称为保留字符。保留字符包括?、/、#、:等。作为URL的一部分传输的任何数据,无论是在查询字符串或路径段中,都不能包含这些字符。
那么,当我们需要在URL中传输包含这些不允许字符的任何数据时,我们该怎么做呢?我们对它们进行编码!
URL Encoding将URL中保留的、不安全的、非ascii字符转换为所有web浏览器和服务器普遍接受和理解的格式。它首先将字符转换为一个或多个字节。然后,每个字节由两个前带百分号(%)的十六进制数字表示(例如%xy)。百分号用作转义字符。
URL编码也称为百分比编码,因为它使用百分号(%)作为转义字符。
URL编码的例子
空格:您可能遇到的最常见的URL编码字符之一是空格。十进制空格字符的ASCII值是32,转换成十六进制就是20。现在我们只需要在十六进制表示法的前面加上一个百分号(%),就会得到经过编码的URL值- %20。
ASCII字符编码参考
下表是ASCII字符对其对应URL Encoded表单的引用。
Decimal | Character | URL Encoding (UTF-8) |
---|---|---|
0 | NUL(null character) | %00 |
1 | SOH(start of header) | %01 |
2 | STX(start of text) | %02 |
3 | ETX(end of text) | %03 |
4 | EOT(end of transmission) | %04 |
5 | ENQ(enquiry) | %05 |
6 | ACK(acknowledge) | %06 |
7 | BEL(bell (ring)) | %07 |
8 | BS(backspace) | %08 |
9 | HT(horizontal tab) | %09 |
10 | LF(line feed) | %0A |
11 | VT(vertical tab) | %0B |
12 | FF(form feed) | %0C |
13 | CR(carriage return) | %0D |
14 | SO(shift out) | %0E |
15 | SI(shift in) | %0F |
16 | DLE(data link escape) | %10 |
17 | DC1(device control 1) | %11 |
18 | DC2(device control 2) | %12 |
19 | DC3(device control 3) | %13 |
20 | DC4(device control 4) | %14 |
21 | NAK(negative acknowledge) | %15 |
22 | SYN(synchronize) | %16 |
23 | ETB(end transmission block) | %17 |
24 | CAN(cancel) | %18 |
25 | EM(end of medium) | %19 |
26 | SUB(substitute) | %1A |
27 | ESC(escape) | %1B |
28 | FS(file separator) | %1C |
29 | GS(group separator) | %1D |
30 | RS(record separator) | %1E |
31 | US(unit separator) | %1F |
32 | space | %20 |
33 | ! | %21 |
34 | " | %22 |
35 | # | %23 |
36 | $ | %24 |
37 | % | %25 |
38 | & | %26 |
39 | ' | %27 |
40 | ( | %28 |
41 | ) | %29 |
42 | * | %2A |
43 | + | %2B |
44 | , | %2C |
45 | - | %2D |
46 | . | %2E |
47 | / | %2F |
48 | 0 | %30 |
49 | 1 | %31 |
50 | 2 | %32 |
51 | 3 | %33 |
52 | 4 | %34 |
53 | 5 | %35 |
54 | 6 | %36 |
55 | 7 | %37 |
56 | 8 | %38 |
57 | 9 | %39 |
58 | : | %3A |
59 | ; | %3B |
60 | < | %3C |
61 | = | %3D |
62 | > | %3E |
63 | ? | %3F |
64 | @ | %40 |
65 | A | %41 |
66 | B | %42 |
67 | C | %43 |
68 | D | %44 |
69 | E | %45 |
70 | F | %46 |
71 | G | %47 |
72 | H | %48 |
73 | I | %49 |
74 | J | %4A |
75 | K | %4B |
76 | L | %4C |
77 | M | %4D |
78 | N | %4E |
79 | O | %4F |
80 | P | %50 |
81 | Q | %51 |
82 | R | %52 |
83 | S | %53 |
84 | T | %54 |
85 | U | %55 |
86 | V | %56 |
87 | W | %57 |
88 | X | %58 |
89 | Y | %59 |
90 | Z | %5A |
91 | [ | %5B |
92 | \ | %5C |
93 | ] | %5D |
94 | ^ | %5E |
95 | _ | %5F |
96 | ` | %60 |
97 | a | %61 |
98 | b | %62 |
99 | c | %63 |
100 | d | %64 |
101 | e | %65 |
102 | f | %66 |
103 | g | %67 |
104 | h | %68 |
105 | i | %69 |
106 | j | %6A |
107 | k | %6B |
108 | l | %6C |
109 | m | %6D |
110 | n | %6E |
111 | o | %6F |
112 | p | %70 |
113 | q | %71 |
114 | r | %72 |
115 | s | %73 |
116 | t | %74 |
117 | u | %75 |
118 | v | %76 |
119 | w | %77 |
120 | x | %78 |
121 | y | %79 |
122 | z | %7A |
123 | { | %7B |
124 | %7C | |
125 | } | %7D |
126 | ~ | %7E |
127 | DEL(delete (rubout)) | %7F |
参考
RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。