详解 URL 编码与 HTTP 状态码(十八)

在现代 Web 开发中,URL 编码和 HTTP 状态码是两个非常重要的概念。本文将详细介绍 URL 编码的原理、方法以及 HTTP 状态码的分类和常见状态码的含义。通过本文,你将能够更好地理解和处理这些技术细节,提升开发效率和代码质量。

什么是 URL?

URL(Uniform Resource Locator,统一资源定位器)是互联网上资源的唯一地址。例如,https://www.example.com 就是一个典型的 URL。浏览器通过这个地址从 Web 服务器请求页面内容,并显示给用户。

URL 编码的重要性

URL 只能使用 ASCII 字符集进行传输。然而,许多字符(如空格、特殊符号等)并不属于 ASCII 字符集。为了确保这些字符能够正确地通过互联网传输,我们需要对它们进行 URL 编码。

URL 编码的基本原理

URL 编码使用 % 符号后跟两位的十六进制数来表示非 ASCII 字符。例如,空格会被编码为 %20,感叹号会被编码为 %21。此外,URL 编码通常使用 + 符号来替代空格。

实际操作示例

假设你在表单中输入了一个包含空格和特殊字符的字符串,例如 Hello World!。当你点击提交按钮时,浏览器会自动将这个字符串进行 URL 编码,变成 Hello%20World%21。服务器接收到这个编码后的字符串后,会将其解码还原为原始字符串。

常见的 URL 编码函数

不同的编程语言提供了不同的 URL 编码函数。以下是一些常见的示例:

  • JavaScript: encodeURI() 和 encodeURIComponent()
  • PHP: rawurlencode()
  • ASP: Server.URLEncode()

JavaScript 示例

const originalString = "Hello World!";
const encodedString = encodeURIComponent(originalString);
console.log(encodedString); // 输出: Hello%20World%21

PHP 示例

$originalString = "Hello World!";
$encodedString = rawurlencode($originalString);
echo $encodedString; // 输出: Hello%20World%21

URL 编码参考手册

以下是一些常用字符的 URL 编码对照表:

ASCII 字符URL-编码
空格%20
!%21
"%22
#%23
$%24
%%25
&%26
'%27
(%28
)%29
*%2A
+%2B
,%2C
-%2D
.%2E
/%2F
0%30
1%31
2%32
3%33
4%34
5%35
6%36
7%37
8%38
9%39
:%3A
;%3B
<%3C
=%3D
>%3E
?%3F
@%40
A%41
B%42
C%43
D%44
E%45
F%46
G%47
H%48
I%49
J%4A
K%4B
L%4C
M%4D
N%4E
O%4F
P%50
Q%51
R%52
S%53
T%54
U%55
V%56
W%57
X%58
Y%59
Z%5A
[%5B
\%5C
]%5D
^%5E
_%5F
%60
a%61
b%62
c%63
d%64
e%65
f%66
g%67
h%68
i%69
j%6A
k%6B
l%6C
m%6D
n%6E
o%6F
p%70
q%71
r%72
s%73
t%74
u%75
v%76
w%77
x%78
y%79
z%7A
{%7B
|%7C
}%7D
~%7E

ASCII 控制字符的 URL 编码

ASCII 控制字符最初用于控制打印机和磁带驱动器等硬件设备。在 URL 中,这些字符需要进行编码以确保其正确传输。

ASCII 字符描述URL-编码
NULnull character%00
SOHstart of header%01
STXstart of text%02
ETXend of text%03
EOTend of transmission%04
ENQenquiry%05
ACKacknowledge%06
BELbell (ring)%07
BSbackspace%08
HThorizontal tab%09
LFline feed%0A
VTvertical tab%0B
FFform feed%0C
CRcarriage return%0D
SOshift out%0E
SIshift in%0F
DLEdata link escape%10

| DC1 | device control 1 | %11 | | DC2 | device control 2 | %12 | | DC3 | device control 3 | %13 | | DC4 | device control 4 | %14 | | NAK | negative acknowledge | %15 | | SYN | synchronize | %16 | | ETB | end transmission block | %17 | | CAN | cancel | %18 | | EM | end of medium | %19 | | SUB | substitute | %1A | | ESC | escape | %1B | | FS | file separator | %1C | | GS | group separator | %1D | | RS | record separator | %1E | | US | unit separator | %1F |

ISO 语言代码

在 HTML 和 XHTML 中,可以通过 lang 属性声明网页或部分内容的语言。这对于搜索引擎和浏览器来说非常重要,有助于提高页面的可访问性和国际化支持。

声明语言的示例

在 HTML 中:

html &amp;lt;html lang="en"&amp;gt; ... &amp;lt;/html&amp;gt;

在 XHTML 中:

html &amp;lt;html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"&amp;gt; ... &amp;lt;/html&amp;gt;

ISO 639-1 语言代码

ISO 639-1 为各种语言定义了缩略词,这些缩略词可以在 lang 和 xml:lang` 属性中使用。

语言ISO 代码
Abkhazianab
Afaraa
Afrikaansaf
Albaniansq
Amharicam
Arabicar
Aragonesean
Armenianhy
Assameseas
Aymaraay
Azerbaijaniaz
Bashkirba
Basqueeu
Bengali (Bangla)bn
Bhutanidz
Biharibh
Bislamabi
Bretonbr
Bulgarianbg
Burmesemy
Byelorussian (Belarusian)be
Cambodiankm
Catalanca
Cherokee
Chewa
Chinese (简体)zh
Chinese (繁体)zh
Corsicanco
Croatianhr
Czechcs
Danishda
Divehi
Dutchnl
Edo
Englishen
Esperantoeo
Estonianet
Faeroesefo
Farsifa
Fijifj
Finnishfi
Flemish
Frenchfr
Frisianfy
Fulfulde
Galiciangl
Gaelic (Scottish)gd
Gaelic (Manx)gv
Georgianka
Germande
Greekel
Greenlandickl
Guaranign
Gujaratigu
Haitian Creoleht
Hausaha
Hawaiian
Hebrewhe, iw
Hindihi
Hungarianhu
Ibibio
Icelandicis
Idoio
Igbo
Indonesianid, in
Interlinguaia
Interlingueie
Inuktitutiu
Inupiakik
Irishga
Italianit
Japaneseja
Javanesejv
Kannadakn
Kanuri
Kashmiriks
Kazakhkk
Kinyarwanda (Ruanda)rw
Kirghizky
Kirundi (Rundi)rn
Konkani
Koreanko
Kurdishku
Laothianlo
Latinla
Latvian (Lettish)lv
Limburgish ( Limburger)li
Lingalaln
Lithuanianlt
Macedonianmk
Malagasymg
Malayms
Malayalamml
Maltesemt
Maorimi
Marathimr
Moldavianmo
Mongolianmn
Nauruna
Nepaline
Norwegianno
Occitanoc
Oriyaor
Oromo (Afaan Oromo)om
Papiamentu
Pashto (Pushto)ps
Polishpl
Portuguesept
Punjabipa
Quechuaqu
Rhaeto-Romancerm
Romanianro
Russianru
Sami (Lappish)
Samoansm
Sangrosg
Sanskritsa
Serbiansr

| Serbo-Croatian | sh | | Sesotho | st | | Setswana | tn | | Shona | sn | | Sichuan Yi | ii | | Sindhi | sd | | Sinhalese | si | | Siswati | ss | | Slovak | sk | | Slovenian | sl | | Somali | so | | Spanish | es | | Sundanese | su | | Swahili (Kiswahili) | sw | | Swedish | sv | | Syriac | | | Tagalog | tl | | Tajik | tg | | Tamazight | | | Tamil | ta | | Tatar | tt | | Telugu | te | | Thai | th | | Tibetan | bo | | Tigrinya | ti | | Tonga | to | | Tsonga | ts | | Turkish | tr | | Turkmen | tk | | Twi | tw | | Uighur | ug | | Ukrainian | uk | | Urdu | ur | | Uzbek | uz | | Venda | | | Vietnamese | vi | | Volapük | vo | | Wallon | wa | | Welsh | cy | | Wolof | wo | | Xhosa | xh | | Yi | | | Yiddish | yi, ji | | Yoruba | yo | | Zulu | zu |

HTTP 状态码

HTTP 状态码是由服务器返回给客户端的响应代码,用于指示请求的处理结果。这些状态码分为五个类别,每个类别都有特定的含义。

1xx: 信息

消息描述
100 Continue服务器仅接收到部分请求,如果服务器没有拒绝该请求,客户端应该继续发送其余的请求。
101 Switching Protocols服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。
103 Checkpoint用于 PUT 或者 POST 请求恢复

2xx: 成功

消息描述
200 OK请求成功,响应中包含所请求的数据。
201 Created请求成功并且服务器创建了新的资源。
202 Accepted请求已被接受,但尚未处理完成。
204 No Content请求成功,但响应中没有内容。

3xx: 重定向

消息描述
301 Moved Permanently资源已永久移动到新位置。
302 Found资源临时移动到新位置。
304 Not Modified资源未修改,客户端可以使用缓存版本。

4xx: 客户端错误

消息描述
400 Bad Request请求无效或无法理解。
401 Unauthorized请求需要用户认证。
403 Forbidden服务器理解请求,但拒绝执行。
404 Not Found请求的资源不存在。

5xx: 服务器错误

消息描述
500 Internal Server Error服务器遇到意外情况,无法完成请求。
501 Not Implemented服务器不支持请求的方法。
502 Bad Gateway服务器作为网关或代理时,从上游服务器收到了无效的响应。
503 Service Unavailable服务器暂时无法处理请求,通常是过载或维护导致。

总结

通过本文,我们详细介绍了 URL 编码的原理和方法,以及 HTTP 状态码的分类和常见状态码的含义。了解这些基础知识对于 Web 开发者来说至关重要,可以帮助你更好地处理网络请求和响应,提升开发效率和代码质量。希望本文对你有所帮助!