2

我有一个问题,我被要求将一些参数放入请求的 HTTP 标头中。Web 服务器(使用 jersey 1.17)将解析来自标头字段的参数。但是,参数的值应该由 UTF-8 形成。是否可以在 HTTP 标头中放置一个 UTF-8 字符串?如果可能的话,我如何使用rest客户端(例如Firefox插件中的RESTClient)来模拟它?

我试图通过谷歌搜索这个问题,并且一个问题(我应该为 HTTP 标头使用什么字符编码?)似乎与我的问题有关。响应说 HTTP 标头仅在字符集不是 ISO-8859-1 时才使用 MIME 编码。如果这是真的,我如何解析 jersey 中的 MIME 编码以从请求标头中获取正确的 UTF-8 字符串?

非常感谢!

4

1 回答 1

1

感谢 Eugen,我找到了解决方案。

由于 RFC 定义了 header 可以接受 MIME 编码,因此答案是在通过 RestClient 发送 HTTP 请求之前在 header 字段上放置一个编码字符串。对于以 jersey 形式接收请求的服务器,从 header 中获取字符串并使用 MIME 解码器对字符串进行解码。

例如:

@GET
@Path("/get")
public Response get (@Context HttpHeaders headers) {
    // Get the value from header, where "header-name" is the key name of the header.
    String value = headers.getRequestHeader("header-name").get(0);
    // Decode the value using MIME decoder.
    try {
        value = javax.mail.internet.MimeUtility.decodeText(value);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    System.out.println("Decoded value from header: " + value);
    return Response.ok().build();
}
于 2013-10-09T04:24:33.643 回答