【问题标题】:Jetty: How do we allow HttpServletRequest.GetParameter() to parse % symbol?Jetty:我们如何允许 HttpServletRequest.GetParameter() 解析 % 符号?
【发布时间】:2014-10-22 22:24:39
【问题描述】:

处理语法的url时

http://foo.com?bar=%test%

jetty 抛出一个 IllegalArgumentException 说它不是一个有效的十六进制值。

我们尝试将字符编码更改为 UTF-16,但仍然无法解析 %.有没有办法让 '%' 被 HttpPServletRequest 接口中的 getParameter 或 getParameterMap 函数解析?

getParameter("bar") = "%test%" 的预期输出

【问题讨论】:

  • "%" 是 URI 的关键字,由于 http 协议,当你请求 "bar=%test%" 时,码头会出现解析异常。据我所知,“%”等于“%25”,所以你可以请求“foo.com?bar=%25test%25”来实现它。

标签: java http servlets encoding jetty


【解决方案1】:

URL/URI 中的符号% 是一个保留字符,用于处理URL/URI 中的Percent Encoded 字符。 - 见RFC3986 Section 2.1

Jetty 看到的是 % 字符,然后必须使用接下来的 2 个字符 te 来解码您想要的 UTF-8 字节,这在您的测试用例中会导致无效的百分比编码。

从根本上说,您的示例 URL/URI 是“格式错误的 URI”。 (尝试在JavascriptPythonPerl中解码)

另请注意,所有 URL/URI 处理实际上都是 UTF-8(以不同的编码方案解析 URL/URI 是标准和规范)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 2016-02-21
    • 2020-02-29
    相关资源
    最近更新 更多