参数URIEncoding
的Tomcat中8的描述 - Apache Tomcat 8 - The HTTP Connector:
这指定的字符编码用于在%xx解码URL后解码URI字节。如果未指定,则将使用UTF-8,除非org.apache.catalina.STRICT_SERVLET_COMPLIANCE系统属性设置为true,在这种情况下将使用ISO-8859-1。
因此,说明了从的Apache Tomcat 7的改变的org.apache.catalina.STRICT_SERVLET_COMPLIANCE
的默认值是从Apache Tomcat上假8.所以UTF-8是的URIEncoding的用于Apache Tomcat的8,这意味着现在Tomcat的默认值遵循标准(和常用)。
至于为什么Tomcat的使用ISO 8859-1作为默认的URI编码,直到Tomcat的7:
这似乎是因为Tomcat的devevelopers认为这是什么Servlet规范要求(如名称的设置STRICT_SERVLET_COMPLIANCE指示)。
事实上,Servlet规范没有在任何版本中明确提及URI编码。但是,它确实提到,如果Content-Type
HTTP头没有通过charset
(Servlet规范V2.5,“请求数据编码”)指定编码,则必须将POST数据解析为ISO 8859-1。显然这被解释为意味着查询参数(以及整个URI)也应该被默认解码为ISO 8859-1。
根本问题可以说是Servlet规范没有指定用于解码URI的默认编码,更不用说改变这种编码的方法。这反过来可能是因为URI规范最初不允许URI中的非ASCII字符 - 这只是通过引入IRI来标准化的,参见2005年1月的RFC 3987。因此,每个servlet容器都必须提供它们自己的默认值和配置参数,如Apache Tomcat中的URIEncoding
。
这两个问题一直被列为对Servlet规范的错误:
也许Servlet规范的能力将被修改一天...
相关问题:[如何在Tomcat中设置请求编码?](http:// stackoverflow .com/questions/6876697/how-to-set-request-encoding-in-tomcat) – sleske