为什么ASCII字符集存在URL编码

时间:2013-12-31 08:40:18

标签: security url encoding ascii

W3Schools明确指出

  

只能使用ASCII字符集通过Internet发送URL。

为什么对于ASCII字符(例如a,b,c)存在URL编码,因为它可以在没有任何URL编码的情况下通过互联网发送?

例如:为什么编码'a'时它可以作为'a'

发送

编码ASCII字符的可能原因是什么?我能想到的唯一原因是黑客试图让他们的URL尽可能无法进行XSS攻击

4 个答案:

答案 0 :(得分:3)

对于整个ASCII范围存在URL编码,因为定义适用于所有字符的编码比定义仅适用于具有特殊含义的字符集的编码更容易。

答案 1 :(得分:2)

STD 66,Percent-Encoding

  

百分比编码机制用于表示组件中的数据八位位组,当该八位位组的相应字符位于允许的集合之外或用作组件的分隔符或在组件内时。

因此,百分比编码是一种转义机制:某些字符在URI组件中具有特殊含义(→它们是保留)。如果你想使用没有特殊含义的字符,你可以对它进行百分比编码。

无法保留的字符(例如abc,...)可以直接使用,但也可以对它们进行百分比编码。这样的URI将是equivalent

  

将替换未保留字符与其对应的百分比编码的US-ASCII八位字节不同的URI是等效的:它们标识相同的资源。

为什么首先允许对非保留字符进行百分比编码? obsolete RFC 2396包含(由我加粗):

  

可以在不更改URI语义的情况下转义未保留的字符,但不应该执行此操作,除非在不允许非转义字符出现的上下文中使用URI

我想不出这样一个“背景”的例子,但这句话暗示可能有一些。

此外,可能某些人/实现喜欢简单地对所有内容进行百分比编码(分隔符等除外),因此他们不必检查/是否字符在相应的组件中需要百分比编码。

答案 2 :(得分:1)

URL编码允许URL中具有特殊含义的字符包含在段中,而不具有其特殊含义。有很多例子,但最常见的要求编码包括“”,“?”,“=”和“&”

答案 3 :(得分:1)

设计了URL编码,因此它可以编码任何ASCII字符。

虽然=编码为%3d?编码为%3f&编码为%26,但它有意义a要编码为%61b要编码为%62,因为%后的十六进制数代表{{1}}的{​​{1}}字符。