原文地址:http://www.w2bc.com/Article/15349
parse | 英[pɑ:z] | 美[pɑ:rs] |
vt. |
手机客户端向服务器提交Http请求时,Tomcat抛出错误:
十二月 31, 2014 2:32:45 下午 org.apache.coyote.http11.AbstractHttp11Processor process
信息: Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
经过调试后发现是Tomcat的header缓冲区大小不够,只需要在server.xml中增加maxHttpHeaderSize字段即可:
<Connector URIEncoding="UTF-8" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
useBodyEncodingForURI="false"
enableLookups="false"
connectionTimeout="20000"
redirectPort="8443" maxHttpHeaderSize="你想要的大小"/>
不过使用Web提交就不会出现这种问题,即使手机端再三强调使用的是Post方式,仍怀疑是因为使用的Get导致Header数据过长.
============
我修改的如下(顺便把端口从8080改到了80),然后用bin/shutdown.sh和bin/startup.sh来重启:
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" maxHttpHeaderSize="8192" URIEncoding="UTF-8" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" maxHttpHeaderSize="8192" URIEncoding="UTF-8" />
-->
======================
但是关闭和启动执行太快,秒级完成。启动在关闭后等了几分钟才去输入的启动指令。但是好像没有真正起来,估计和数据库有关。reboot后也不管用。猜测是不是应该先听或者关闭PostGreSQL然后再执行Tomcat的关闭和启动?
[root@david bin]# ./shutdown.sh
Using CATALINA_BASE: /lr62/liferay-portal-6.2-ce-ga4/tomcat-7.0.42
Using CATALINA_HOME: /lr62/liferay-portal-6.2-ce-ga4/tomcat-7.0.42
Using CATALINA_TMPDIR: /lr62/liferay-portal-6.2-ce-ga4/tomcat-7.0.42/temp
Using JRE_HOME: /usr/java/jre1.8.0_45
Using CLASSPATH: /lr62/liferay-portal-6.2-ce-ga4/tomcat-7.0.42/bin/bootstrap.jar:/lr62/liferay-portal-6.2-ce-ga4/tomcat-7.0.42/bin/tomcat-juli.jar
[root@david bin]# ./startup.sh
Using CATALINA_BASE: /lr62/liferay-portal-6.2-ce-ga4/tomcat-7.0.42
Using CATALINA_HOME: /lr62/liferay-portal-6.2-ce-ga4/tomcat-7.0.42
Using CATALINA_TMPDIR: /lr62/liferay-portal-6.2-ce-ga4/tomcat-7.0.42/temp
Using JRE_HOME: /usr/java/jre1.8.0_45
Using CLASSPATH: /lr62/liferay-portal-6.2-ce-ga4/tomcat-7.0.42/bin/bootstrap.jar:/lr62/liferay-portal-6.2-ce-ga4/tomcat-7.0.42/bin/tomcat-juli.jar
[root@david bin]#
然后网站出来了如下的信息:
HTTP Status 500 - java.lang.ArrayIndexOutOfBoundsException: 0
type Exception report
message java.lang.ArrayIndexOutOfBoundsException: 0
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: java.lang.ArrayIndexOutOfBoundsException: 0 com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:105) com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:119)
root cause
java.lang.ArrayIndexOutOfBoundsException: 0 com.liferay.portal.util.PortalInstances._getDefaultCompanyId(PortalInstances.java:344) com.liferay.portal.util.PortalInstances.getDefaultCompanyId(PortalInstances.java:83) com.liferay.portal.util.PortalImpl.getDefaultCompanyId(PortalImpl.java:1909) com.liferay.portal.util.PortalUtil.getDefaultCompanyId(PortalUtil.java:522) com.liferay.portal.servlet.filters.validhostname.ValidHostNameFilter.doFilterTry(ValidHostNameFilter.java:38) com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:183) com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96) com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:119)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.42 logs.