解析HTTP请求标头时出错

时间:2014-10-22 09:22:18

标签: java http servlets

我正在尝试从浏览器向我的服务器(本地主机)发送POST请求。我的请求网址是:

 http://localhost:8080/myPath/myServlet?requestData={  .......//Json String......};

requestData是一个json String(我正在使用GSON。)一切正常,直到json字符串中的数据超过特定限制。说,我在json字符串中发送对象数组。如果列表中的对象数超过67,则会出现以下错误:

 AM org.apache.coyote.http11.AbstractHttp11Processor process
 INFO: Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.

为什么会这样?我完全糊涂了。为什么会发生这种情况以及需要采取哪些措施来解决这个问题? 我想了解这背后的原因,因为我不明白在特定数量的对象之后突然停止工作,我在控制台中出现了这个错误。

感谢。

6 个答案:

答案 0 :(得分:4)

您似乎错误地使用了POST。虽然您使用的是POST,但您发送的JSON作为GET样式的请求参数。使用POST时,您应该将内容作为请求正文发送。在这种情况下,不存在合理的尺寸限制。

答案 1 :(得分:4)

我遇到了类似的问题,我在请求正文中发送了一个POST请求(使用RESTClient插件,用于Firefox),并且收到了相同的消息。

在我的情况下,这是因为我试图在未配置HTTPS的本地tomcat实例中使​​用HTTPS协议。

答案 2 :(得分:1)

在我的情况下,问题是由安全问题引起的,我使用csfr进行身份验证,我的所有帖子表单都应该输入_csrf

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>

答案 3 :(得分:1)

我很抱歉没有认真回答问题。

1.也许是由特殊字符引起的。你可以从这个网址获取详细信息。https://bz.apache.org/bugzilla/show_bug.cgi?id=60594

通过以下方式解决:

encodeURIComponent(JSON.stringify(data))

或将您的tomcat版本更改为7.0.67或更低版​​本。 根据开发人员的意见,以下版本中的tomcat开发人员设置了允许|,{,}的选项。 获取详细信息http://tomcat.apache.org/tomcat-8.0-doc/config/systemprops.html#Other

新环境变量将包含在: - 主干为9.0.0.M18以后

  • 8.5.x for 8.5.12以后

  • 8.0.x for 8.0.42以后

  • 7.0.x for 7.0.76 onwards2。

另一个原因可能是Request标头太大。您可以通过修改server.xml来解决此问题。

<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" 
    minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
    redirectPort="8443" acceptCount="100" connectionTimeout="20000" 
    disableUploadTimeout="true" />

希望它适合你!

答案 4 :(得分:0)

恕我直言,解析标题的问题可能由多种原因引起。

就我而言,这是因为传递了以下XML:

<soapenv:Header/>

空头元素由SoapUI生成。 从WS的XML中删除<soapenv:Header/>后,一切都很好。

答案 5 :(得分:0)

我通过传递附加的标头来解决此问题

连接:关闭以及请求。

请您尝试让我知道是否适合您。