【问题标题】:Why does URL encoding exist for ASCII character set为什么 ASCII 字符集存在 URL 编码
【发布时间】:2014-01-18 05:08:40
【问题描述】:
W3Schools中明确指出
只能使用 ASCII 字符集通过 Internet 发送 URL。
当 ASCII 字符(如 a 、 b 、 c )可以在没有任何 URL 编码的情况下通过 Internet 发送时,为什么存在 URL 编码???
例如:当它可以作为“a”发送时为什么要编码“a”
对 ASCII 字符进行编码的可能原因是什么?我能想到的唯一原因是黑客试图使他们的 URL 尽可能不可读以进行 XSS 攻击
【问题讨论】:
标签:
security
url
encoding
ascii
【解决方案1】:
性病 66,Percent-Encoding:
当八位字节的对应字符超出允许的集合或用作组件的分隔符或组件内时,百分比编码机制用于表示组件中的数据八位字节。
所以百分比编码是一种转义机制:某些字符在 URI 组件中具有特殊含义(→ 它们是 保留的)。如果你想使用这样一个没有特殊含义的字符,你可以对它进行百分比编码。
未保留的字符(如a、b、c,...)始终可以直接使用,但也可以对它们进行百分比编码。这样的 URI 将是 equivalent:
在用相应的百分比编码的 US-ASCII 八位字节替换未保留字符方面不同的 URI 是等效的:它们标识相同的资源。
为什么首先允许对未保留的字符进行百分比编码? obsolete RFC 2396 包含(由我加粗):
可以在不改变 URI 语义的情况下转义未保留的字符,但不应这样做除非在不允许未转义字符出现的上下文中使用 URI。。 p>
我想不出这样一个“上下文”的例子,但这句话暗示可能有一些。
另外,也许有些人/实现喜欢简单地对所有内容进行百分比编码(分隔符等除外),因此他们不必检查 if/which字符需要在相应的组件中进行百分比编码。
【解决方案2】:
URL 编码适用于所有 ASCII 字符,因为定义一种适用于所有字符的编码比定义一种只适用于具有特殊含义的字符集的编码更容易。
【解决方案3】:
URL 编码允许将 URL 中具有特殊含义的字符包含在一个段中,而无需它们的特殊含义。有很多例子,但最常见的需要编码的例子包括“”、“?”、“=”和“&”
【解决方案4】:
URL 编码被设计成可以编码任何 ASCII 字符。
虽然= 编码为%3d,? 编码为%3f 和& 编码为%26,但a 编码为%61 和@ 是有意义的987654330@要编码为%62,因为%后面的十六进制数代表字符的ASCII code。