用户登录
用户注册

分享至

HTTP URL编码

  • 作者: 二郎22861586
  • 来源: 51数据库
  • 2022-09-23

URL 就是平时我们所说的网址,一般来说 URL 只能使用英文字母、阿拉伯数字和一些英文的标点符号组成。其实在网络中 URL 并不是可以直接拿来使用的,因为 URL 中可以携带一些参数,出于安全考虑,需要使用 ASCII 字符集对其编码后才可以使用。

ASCII 的全称是 American Standard Code for Information Interchange,中文是“美国信息交换标准代码”的意思,它是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。ASCII 是最通用的信息交换标准,ASCII 第一次发表是在 1967 年,最后一次更新则是在 1986 年,到目前为止共定义了 128 个字符。

URL 的编码原则是,使用安全的字符(没有特殊用途或者特殊意义的字符)来表示那些不安全的字符。只有英文字母(a-zA-Z)、数字(0-9)、- _ . ~4 个特殊字符以及所有保留字符才可以不经编码直接使用。

在 URL 编码的过程中,会执行以下操作步骤:

  • 将所有认为“不安全”的字符转换为“%xx”的形式,其中 xx 是字符的十六进制 ASCII 值;

  • 将空格转换为加号或者“%20”,将加号转换为“%2B”。


下表中列出了要替换的字符、ASCII 码和替换后的字符。

要转换的符号ASCII 码转换后的字符要转换的符号ASCII 码转换后的字符
退格08%08O79O
tab 缩进09%09P80P
换行10%0AQ81Q
回车13%0DR82R
空格32%20 或 +S83S
!33%21T84T
"34%22U85U
#35%23V86V
$36%24W87W
%37%25X88X
&38%26Y89Y
'39%27Z90Z
(40%28[91%5B
)41%29\92%5C
*42*]93%5D
+43%2B^94%5E
'44%2C_95_
-45-.96%60
.46.a97a
/47%2Fb98b
0480c99c
1491d100d
2502e101e
3513f102f
4524g103g
5535h104h
6546i105i
7557j106j
8568k107k
9579l108l
:58%3Am109m
;59%3Bn110n
<60%3Co1110
=61%3Dp112p
>62%3Eq113q
?63%3Fr114r
@64%40s115s
A65At116t
B66Bu117u
C67Cv118v
D68Dw119w
E69Ex120x
F70Fy121y
G71Gz122z
H72H{123%7B
I73I|124%7C
J74J}125%7D
K75K~126%7E
L76Ldelete127%7F
M77M
>127用“%xx”格式的编码表示,其中“xx”是字符的十六进制 ASCII 值
N78N



以请求“http://c.biancheng.net/HTTP URL”这一 URL 为例,因为 URL 中包含一个空格,所以在请求时会把这个空格转换为“%20”,具体的 HTTP 请求如下所示:

GET /HTTP%20URL HTTP/1.1
Host: c.biancheng.net
...

前面主要介绍的主要是纯英文的 URL,那如果 URL 中包含中文的话该怎么办呢?由于 ASCII 字符集中并不包含中文的编码,所以客户端会将 URL 里面的中文进行 UTF-8 编码,例如“中”字的 UTF-8 编码为“E4 B8 AD”,那么经过客户端转码后“中”字会被转换为“%E4%B8%AD”。以访问“http://www.51sjk.com/Upload/Articles/1/0/330/330480_20220923115621517.jpg URL 为例,HTTP 请求如下所示:

GET /?name=C%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91 HTTP/1.1
Host: c.biancheng.net
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1

通过上面的 HTTP 请求可以看出,客户端直接将 URL 中的“C语言中文网”转换成了“C%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91”。


软件
前端设计
程序设计
Java相关