tomcat的URIEncoding的作用(转)

本文介绍如何在Tomcat中正确配置UTF-8编码以处理GET请求中的中文字符。特别关注了当Tomcat与IIS结合使用时,需要在8009端口的AJP协议上进行特定的URI编码设置。
tomcat5中,为了保证get数据采用UTF8编码,在server.xml中进行了如下设置:

<Connector port="8080" maxThreads="150" minSpareThreads="25" 
maxSpareThreads="75" enableLookups="false" redirectPort="8443" 
acceptCount="100" debug="99" connectionTimeout="20000" 
disableUploadTimeout="true" URIEncoding="UTF-8"/>

这里指定了get时候的数据编码。但是,当使用IIS作为webserver转发servlet/jsp请求给Tomcat时候,这个设置却失效了。其实原因很简单:IIS是通过AJP协议,把请求转发到Tomcat监听的8009端口上的,所以这里针对8080的设置自然就无效了。正确的方法是进行下面的设置:

<Connector port="8009" enableLookups="false" redirectPort="8443" 
debug="0" protocol="AJP/1.3" URIEncoding="UTF-8"/>
Tomcat配置HTTP自动HTTPS可通过以下两种常见方式实现: ### 方式一:修改`web.xml`文件 在tomcat的`web.xml`的`</welcome-file-list>`后面添加如下配置,访问HTTP的连接即可自动跳到HTTPS的连接: ```xml <login-config> <!-- Authorization setting for SSL --> <auth-method>CLIENT-CERT</auth-method> <realm-name>Client Cert Users-only Area</realm-name> </login-config> <security-constraint> <!-- Authorization setting for SSL --> <web-resource-collection > <web-resource-name >SSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> ``` 这种配置可以强制所有HTTP请求换为HTTPS请求,参考文档 [^1][^3]。 ### 方式二:修改`server.xml`文件 同时配置HTTP和HTTPS的连接器,并设置HTTP请求的重定向端口。示例配置如下: ```xml <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" /> <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" scheme="https" secure="true" keystoreFile="你自己证书的存放位置" keystoreType="PKCS12" keystorePass="证书密码" clientAuth="false" SSLProtocol="TLSv1.1+TLSv1.2+TLSv1.3" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256" /> ``` 此配置中,端口80的HTTP连接器将所有请求重定向到端口443的HTTPS连接器。若要使用自定义端口,可参考如下配置,实现8090端口自动跳至8095端口: ```xml <Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8095" URIEncoding="UTF-8"/> <Connector port="8095" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" URIEncoding="UTF-8" sslEnabledProtocols="SSLv2,SSLv3,TLSv1,TLSv1.1,TLSv1.2,SSLv2Hello" keystoreFile="/app/wheelchair/ssl/server.keystore" keystorePass="passwd(keystore设置的密码)" /> ``` 参考文档 [^2][^4]。 ### 兼容性建议 在切换时可做HTTP和HTTPS的兼容,去掉页面链接中的HTTP头部,如将`http://www.baidu.com`改为`//www.baidu.com`,这样能自动匹配HTTP头和HTTPS头 [^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值