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