5

私はScalatraWebフレームワークでJetty7.6を使用しています。一部のリクエストでは、応答本文として大きなテキストをクライアントに送信する必要があります。HttpServletResponse.getWriter()を使用して応答を書き込みます。

クライアント側で413ヘッダーフルエラーが発生することに気づきました。どうやらJettyのこの問題に対する1つの解決策は、Jettyのheader-buffer-size値を増やすことです。

HttpServletResponse.getWriter()がリクエストのヘッダーのサイズと何の関係があるのか​​知りたいですか?!私が理解しているように、HttpServletResponse.getWriter()は、応答ヘッダーではなく応答本文に書き込みます。

誰かがこの問題を説明できれば幸いです。

4

3 に答える 3

6

残念ながら、これは重要なヘッダーだけではありません (joakime thugth など)。Jetty には、ヘッダー用のバッファーと要求用のバッファーがあります。

  • 完全な要求 (http データ ストリーム) が聞き手のバッファに収まる場合、問題はありません。
  • ヘッダーのバッファを超える場合、リクエスト バッファはユーザーになります。
  • リクエスト バッファを超えると、ステータス 413 の標準の HTTP レスポンスが返されます。

答えには同じもの (バッファ) がありますが、うまくいけば、Http は「チャンクされた」応答を送信するように設計されています。

アップロードで同じ問題に直面しています。

私が見つけたのは、これらのバッファのサイズを設定できるということです。参照: http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/server/nio/SelectChannelConnector.html

http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/server/nio/AbstractNIOConnector.html

http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/server/AbstractConnector.html#setRequestHeaderSize(int )

jetty.xml ファイルを使用してそれを行うことができます。

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"     "http://jetty.mortbay.org/configure.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
 <Call name="addConnector">
  <Arg>
   <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
    <Set name="port"><SystemProperty name="jetty.port" default="8080"/></Set>
    <Set name="requestHeaderSize">8192</Set>
   </New>
  </Arg>
 </Call>
</Configure>
于 2012-08-14T08:14:00.660 に答える
3

HTTP 応答コード 413は HttpStatus です。REQUEST_ENTITY_TOO_LARGE

HttpServletResponse.getWriter() とは関係ありません。

要求ヘッダーをキャプチャして確認してください。サーバーに不当な量のヘッダーを送信しています。

于 2012-08-11T13:30:48.810 に答える
2

Jetty 9 を使用しているか、または Jetty 9 にアップグレードしている場合は、SelectChannelConnector が削除されています。これが更新された jetty.xml です -

<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
  <Set name="requestHeaderSize">8192</Set>      
</New> 

<Call name="addConnector">
  <Arg>
    <New class="org.eclipse.jetty.server.ServerConnector">
      <Arg name="server"><Ref id="Server" /></Arg>
      <Arg name="factories">
        <Array type="org.eclipse.jetty.server.ConnectionFactory">
          <Item>
            <New class="org.eclipse.jetty.server.HttpConnectionFactory">
              <Arg name="config"><Ref id="httpConfig" /></Arg>
            </New>
          </Item>
        </Array>
      </Arg>
      <Set name="port">8080</Set>
    </New>
  </Arg>
</Call>

http://www.eclipse.org/jetty/documentation/current/configuring-connectors.htmlを参照してください。

于 2013-10-09T19:13:55.270 に答える