相关疑难解决方法(0)

是斜杠("/")等效于HTTP URL的路径部分中的编码斜杠("%2F")

我有一个网站,以不同的方式处理URL的路径部分(而不是查询字符串)中的"/"和"%2F".根据RFC或现实世界,这是一件坏事吗?

我问,因为我正在使用我正在使用的Web框架(Ruby on Rails)以及下面的图层(Passenger,Apache,例如,我必须为Apache启用"ALLOW_ENCODED_SLASHES").我现在倾向于完全摆脱编码的斜杠,但我想知道我是否应该提交错误报告,我看到涉及编码斜线的奇怪行为.

至于为什么我首先有编码的斜杠,基本上我有这样的路线:

:controller/:foo/:bar
Run Code Online (Sandbox Code Playgroud)

其中: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中可以清楚地看出,原始与编码相当于未保留的字符,但保留字符的故事是什么?

url encoding http

61
推荐指数
3
解决办法
9万
查看次数

URL中的URL编码斜杠

我的地图是:

routes.MapRoute(
   "Default",                                             // Route name
   "{controller}/{action}/{id}",                          // URL with params
   new { controller = "Home", action = "Index", id = "" } // Param defaults
);
Run Code Online (Sandbox Code Playgroud)

如果我使用URL http://localhost:5000/Home/About/100%2f200,则没有匹配的路由.我将URL更改为http://localhost:5000/Home/About/100然后再次匹配路由.

有没有简单的方法来处理包含斜杠的参数?其他转义值(空格%20)似乎有效.

编辑:

编码Base64对我有用.它使URL变得丑陋,但现在还可以.

public class UrlEncoder
{ 
    public string URLDecode(string  decode)
    {
        if (decode == null) return null;
        if (decode.StartsWith("="))
        {
            return FromBase64(decode.TrimStart('='));
        }
        else
        {
            return HttpUtility.UrlDecode( decode) ;
        }
    }

    public string UrlEncode(string encode)
    {
        if (encode == null) return null;
        string encoded = …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc urlencode asp.net-mvc-routing

56
推荐指数
5
解决办法
6万
查看次数

标签 统计

asp.net-mvc ×1

asp.net-mvc-routing ×1

c# ×1

encoding ×1

http ×1

url ×1

urlencode ×1