【问题标题】:Liberty web service response ISO-8859-1Liberty Web 服务响应 ISO-8859-1
【发布时间】:2018-09-14 14:48:16
【问题描述】:

如果 http 请求标头中未设置任何字符集,我的 SOAP Web 服务会以 ISO-8859-1 进行响应。

我尝试了以下方法:

  • 在 jvm.options 中设置以下内容:-Dfile.encoding=UTF-8 -Duser.language=en -Duser.country=US -Dclient.encoding.override=UTF-8
  • 设置环境变量(全局):DEFAULT_CLIENT_ENCODING=UTF-8
  • 创建了一个 SOAP 处理程序,如果 Content-Type 中不存在,则添加 charset=UTF-8

但是,在 Liberty 日志中,我仍然看到传入的消息设置了以下标头:

Encoding: ISO-8859-1
Http-Method: POST
Content-Type: application/soap+xml;action="myWSmethod"

我们的最终用户倾向于在请求标头中不带字符集的情况下发送请求。我们曾经有传统的 WAS8,默认使用 UTF-8。 将 Liberty 设置为也使用 UTF-8 以某种方式失败。

server.xml 中是否有隐藏选项?

Liberty 使用 CXF,它正在拦截传入的消息并设置此标头。为什么还在使用 ISO?

亲切的问候

【问题讨论】:

    标签: utf-8 character-encoding cxf websphere-liberty


    【解决方案1】:

    我不会解释你所有的参数,你必须明白你使用的一些是用于客户端编码的,这是你得到的请求而不是你回复的......

    任何方式...为了澄清 8859-1,HTTP/1.1 rfc 说:

    “charset”参数与某些媒体类型一起使用来定义 数据的字符集(第 3.4 节)。当没有明确的字符集时
    参数由发送者提供,媒体子类型为“text”
    类型被定义为具有“ISO-8859-1”的默认字符集值 通过 HTTP 接收。字符集中的数据不是“ISO-8859-1”或
    它的子集必须标有适当的字符集值。

    一些 HTTP/1.0 软件已经解释了 Content-Type 标头 没有 charset 参数错误地表示“收件人应该 猜猜。”希望阻止这种行为的发件人可以包括 charset 参数,即使字符集是 ISO-8859-1 并且应该这样做 所以当知道它不会混淆收件人时。

    以及应用服务器如何处理编码...

    首先,WebSphere Application Server 的默认行为是 检查是否在内容类型标题上设置了字符集。如果是,那么 产品使用内容类型标头进行字符编码;如果不是, 然后产品使用服务器上设置的字符编码 系统属性 default.client.encoding。如果字符集不存在并且 未设置系统属性,则产品使用 ISO-8859-1。 在 Web 模块上启用 autoRequestEncoding 会更改默认值 行为:如果 charset 它不存在于传入的请求标头中,则 产品检查传入请求的 Accept-Language 标头并 使用在该标头中找到的第一种语言进行编码。如果有 在内容类型标头上没有字符集,也没有接受语言标头, 然后产品使用服务器上设置的字符编码 系统属性 default.client.encoding。与默认行为一样, 如果 charset 不存在且系统属性未设置,则 产品使用 ISO-8859-1。

    【讨论】:

    • 感谢您的回答,但您引用的内容我已经尝试过了,如我的描述中所述。如果这具有误导性,请告诉我,我会尝试以更易于理解的方式表达我的问题。
    猜你喜欢
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2015-10-11
    • 2011-06-10
    • 2013-01-19
    • 2012-05-25
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多