【问题标题】:Why do I get "Error parsing HTTP request header" when POSTing a JSON string?为什么在 POST JSON 字符串时出现“解析 HTTP 请求标头时出错”?
【发布时间】:2014-12-17 17:04:49
【问题描述】:

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

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

requestData 是一个 json 字符串(我为此目的使用了 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.

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

【问题讨论】:

  • 这似乎是 GET 而不是 POST ...
  • 您似乎将json字符串作为GET参数传递,而不是POST
  • 我同意这可能是一个重复的问题,有什么解决办法吗?
  • 如果您在获取请求中也超过了 url 长度,您将收到此错误消息

标签: java http servlets


【解决方案1】:

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

【讨论】:

  • 如何从浏览器发送?
  • 您可以编写带有form标签的HTML页面,定义其method=POST并将action配置到您的URL,创建文本区域字段,然后在那里写入您的JSON并按下按钮submit
【解决方案2】:

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

就我而言,这是因为我试图在未配置 HTTPS 的本地 tomcat 实例中使用 HTTPS 协议。

【讨论】:

    【解决方案3】:

    对于之前没有认真回答问题,我深表歉意。

    1.可能是特殊字符引起的。可以从这个url获取详细信息。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 用于 8.5.12 及更高版本

    • 8.0.x 用于 8.0.42 及更高版本

    • 7.0.x 用于 7.0.76 及更高版本2。

    另外一个原因可能是Request header太大。你可以通过修改server.xml来解决这个问题。

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

    希望对你有用!

    【讨论】:

    • 在回答问题时尝试添加示例,以使其对提问的人更有帮助。
    • 对不起。我已经添加了我所知道的细节。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      在我的情况下,这是因为通过了以下 XML:

      <soapenv:Header/>
      

      空的标题元素是由 SoapUI 生成的。 从 WS 的 XML 中删除 &lt;soapenv:Header/&gt; 之后,一切都很好。

      【讨论】:

        【解决方案6】:

        我通过传递一个额外的标题来解决这个问题

        连接:关闭,以及请求。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-24
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多