我有一个站点在URL的路径部分(而不是查询字符串)中以不同的方式对待“ /”和“%2F”。根据RFC还是现实世界,这是一件坏事吗?
我问是因为我对正在使用的Web框架(Ruby on Rails)以及它下面的层(Passenger,Apache,例如,我必须为Apache启用“ ALLOW_ENCODED_SLASHES”)感到惊讶。我现在倾向于完全摆脱编码的斜杠,但是我想知道是否应该在我看到涉及编码的斜杠的怪异行为时提交错误报告。
至于为什么我首先使用编码的斜杠,基本上我有这样的路由:
:controller/:foo/:bar
:foo是类似路径的内容,可以包含斜杠。我认为最直接的方法就是仅对URL进行转义,foo
从而使斜线被路由机制忽略。现在,我对此表示怀疑,很明显,这些框架并不真正支持此功能,但是根据RFC的说法,这样做是错误的吗?
这是我收集的一些信息:
RFC 1738(URL):
通常,当八位字节由字符表示并进行编码时,URL具有相同的解释。但是,对于保留字符而言并非如此:对为特定方案保留的字符进行编码可能会更改URL的语义。
RFC 2396(URI):
这些字符被称为“保留”,因为它们在URI组件中的使用仅限于其保留目的。如果URI组件的数据将与保留用途冲突,则必须在形成URI之前转义冲突的数据。
(这里的转义除了编码保留字符之外还意味着其他吗?)
RFC 2616(HTTP / 1.1):
除“保留”和“不安全”集中的字符以外的其他字符(请参阅RFC 2396 [42])等效于其““%” HEX HEX“编码。
还有一个针对Rails的错误报告,他们似乎希望编码的斜杠的行为有所不同:
是的,我期望会有不同的结果,因为它们指向的是不同的资源。
它在根目录中查找文字文件“ foo / bar”。非转义版本正在目录foo中查找文件栏。
从RFC可以明显看出,原始字符与编码字符等效于未保留字符,但是保留字符的含义是什么?