【问题标题】:How does URIEncoding = 'UTF-8' work?URIEncoding = 'UTF-8' 是如何工作的?
【发布时间】:2012-12-28 06:15:21
【问题描述】:

当我在http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tomcat/tomcat-catalina/7.0.0/org/apache/catalina/connector/Request.java#Request.parseParameters%28%29查看tomcat源代码时 我找不到在哪里为 get 方法中的 queryString 设置编码,以及 server.xml 中的配置 URIEncoding="UTF-8" 如何在此方法中工作。

【问题讨论】:

  • 网络服务器不应该支持 utf-8。您的应用程序应该知道这一点。
  • @shiplu.mokadd.im:URIEncoding 参数配置 servlet 容器,而不是 Web 服务器本身。而且由于 servlet 容器负责解码查询字符串并将其拆分为单独的参数,因此需要对其进行正确配置。

标签: http tomcat encoding catalina


【解决方案1】:

URIEncoding 参数就是您要查找的参数。设置 URI 解码查询字符串时使用的字符编码。

您在server.xml 中使用它作为Connector 实体的属性。

如果过去成功使用过。

【讨论】:

  • 你的意思是URI包含查询字符串吗?
  • 在 GET 请求中,查询字符串在 URI 中。在 POST 请求中,查询字符串在请求正文中(但 URL 已编码)。
  • 您对文档的哪一部分感兴趣?查询字符串是否在 URL 中?
  • 我在tomcat.apache.org/tomcat-7.0-doc/servletapi/index.html,the方法HTTPServletRequest.getRequestURI找到它。但它说Returns the part of this request's URL from the protocol name up to the query string in the first line of the HTTP request. The web container does not decode this String.。似乎说URI不包含查询字符串。
【解决方案2】:

首先,让我们使用更新版本的 Tomcat。 7.0.0 岁:Request.java from Tomcat 7.0.34

其次,parseParameters 方法不设置编码:它获取其他组件设置的编码。可能设置了内容编码的一些地方:

  1. 连接器的 URIEncoding(根据 HTTP RFC 默认为 ISO-8859-1 AS)
  2. 请求正文编码(来自 HTTP 请求的 Content-Type 标头)
  3. 另一个组件 -- 可能通过查看参数值来嗅探编码

如果您只想在您的网站上无条件地将 URI 编码设置为 UTF-8,那么只需在您的 <Connector> 中使用 URIEncoding 属性。

您的问题的直接答案是 server.xml 的 URIEncoding 属性在此方法中不起作用:它在其他地方起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 2010-09-13
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    相关资源
    最近更新 更多