【问题标题】:Why is Response.Redirect UrlEncoding some parts of the well-formed URL it is supplied?为什么 Response.Redirect UrlEncoding 它提供的格式正确的 URL 的某些部分?
【发布时间】:2015-10-19 00:20:38
【问题描述】:

我有一个很小的(经典)ASP 文件用于重定向。我想将用户发送到一个可能包含一些字符的 URL(我从传入的 URL 中获取它,因为它将所有路径从 domainA 重定向到 domainB,但我在这里对其进行了硬编码以简化事情)。

以下是重定向脚本的示例 URL:

https://old.example.org/my%20test/?name=Danny%20Tuppeny

URL 包含两个空格,我确信它们都被正确编码。如果您将带有文字空格的 URL 粘贴到浏览器中,浏览器会将两者都转换为 %20

我将此网址传递给Response.Redirect(为简单起见,此处硬编码):

<%
Response.Redirect "https://new.example.org/my%20test/?name=Danny%20Tuppeny"
%>

但是,正在输出的位置标头有 一个 %20 再次编码,看起来像这样:

Location: https://new.example.org/my%2520test/?name=Danny%20Tuppeny

这是出乎意料的!这是asked before,但所有答案(包括例外答案)似乎都不正确。我认为我不应该随机解码有效 URL 的某些部分来抵消 ASP 的意外/不受欢迎的行为。

docs 没有提及这种行为(他们甚至说“始终验证和编码传递给 Response.Redirect 的 URL”),更糟糕的是,有关于如何应用 HTML 的示例em> 编码为传递给Response.Redirect 的值,这似乎更不正确。

注意: ASP.NET没有有这种愚蠢的行为。

有没有办法将格式正确的 URL 传递给 Response.Redirect 并让它执行预期的操作?

【问题讨论】:

    标签: redirect iis asp-classic urlencode


    【解决方案1】:

    要解决编码问题,您可以添加 Location 标头来执行重定向。不会对 URL 应用任何编码。

    Response.Status = "302 Moved Temporarily"  ''// or use whatever status code is appropriate
    Response.AddHeader "Location", "https://new.example.org/my%20test/?name=Danny%20Tuppeny"
    

    【讨论】:

    • 这就是我所做的;虽然我希望了解为什么 Response.Redirect 正在做它的事情。是否存在某个世界,它的行为是有意义的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多