在 Apache 中编码双引号

在 Apache 中编码双引号

Tomcat 不允许在 URL 中出现任何“” (双引号) 字符,根据 RFC 7230,它被视为无效字符。

但是,我有许多服务客户仍然使用类似 的 URL 访问我的服务http://abcd.com/userservice?user="donald",我正在寻找将此 URL 重写为 的方法http://abcd.com/userservice?user=%20donald%20。我必须对多个服务(约 20 个)执行此操作。

我在看https://stackoverflow.com/questions/1279681/mod-rewrite-replace-underscores-with-dashes但它对我的用例没有帮助。Apache 似乎不允许用户重写查询参数。有什么建议吗?

答案1

这是客户端即浏览器的任务。如果您http://example.com/userservice?user="donald"在地址栏中键入内容,它将自动使用百分比编码 (RFC 3986, 2.1; 提到RFC 7230, 2.7.3),导致实际查询以以下方式开始:

GET /userservice?user=%22donald%22 HTTP/1.1
Host: example.com

%20在问题中提到的 代表 ASCII 空格字符,0x20,而%22代表 ASCII "(双引号,0x22)。此外,文字%将变成%25等。

您可以重写%22%20,但我认为这只是一个错误。

为了更完整,这里有一张图表。对于百分比编码,请查看十六进制列。

ASCII Hex Symbol     ASCII Hex Symbol     ASCII Hex Symbol     ASCII Hex Symbol

32    20  (space)    39    27    '        46    2E    .        95    5F    _
33    21    !        40    28    (        47    2F    /        96    60    `
34    22    "        41    29    )        64    40    @        123   7B    {
35    23    #        42    2A    *        91    5B    [        124   7C    |
36    24    $        43    2B    +        92    5C    \        125   7D    }
37    25    %        44    2C    ,        93    5D    ]        126   7E    ~
38    26    &        45    2D    -        94    5E    ^        127   7F    

    

相关内容