1

プログラムは、いくつかのファイルを取得して処理し、ZipOutputStream を介して送信し、(通常はかなり大きな) zip ファイルをサーバーにアップロードするように設計されたアプレットです。Apache HttpClient 4.2.1 (および補助ライブラリ) を使用しています。投稿リクエストが特権スペースで実行されています。私が抱えている問題は、Apache/2.2.16 (Win32) がリクエストを拒否することです。Apache エラー ログに「チャンクされた Transfer-Encoding は禁止されています」というエラーが表示されます。

Wireshark を使用して接続をキャプチャすると、リクエストは次のようになります。

POST /data/FileUpload.php?userId=21 HTTP/1.1
Transfer-Encoding: chunked
Content-Type: multipart/form-data; boundary=PjgV56PRG1T0eeWZNfM3Gumc8v0p8j
Host: 192.168.2.16:8000
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.2.1 (java 1.5)
10be

--PjgV56PRG1T0eeWZNfM3Gumc8v0p8j
Content-Disposition: form-data; name="ZipFile"; filename="JavaUploaderZipStream.zip"
Content-Type: application/zip
Content-Transfer-Encoding: binary

このリクエストを実行するコードは次のとおりです。

    HttpParams params = new BasicHttpParams();
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
    HttpClient httpclient = new DefaultHttpClient(params);

    HttpPost httpPost = new HttpPost(url);
    ZipCompressionInputStream zipStream = new ZipCompressionInputStream(fileList);

    MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.STRICT);
    InputStreamBody uploadPart = new InputStreamBody(zipStream, "application/zip", "JavaUploaderZipStream.zip");
    reqEntity.addPart("ZipFile", uploadPart);
    httpPost.setEntity(reqEntity);

    HttpResponse response = httpclient.execute(httpPost);
    try {
        HttpEntity responseEntity = response.getEntity();
        EntityUtils.consume(responseEntity);
    } finally {
        httpPost.releaseConnection();
    }

私が知る限り、Apache 2.2 はチャンク データを受け入れるはずです。それを拒否するスイッチは見当たりません。HTTP/1.1 接続を受け付けているようです。なぜそれが私が試みたものを完全に拒否するのか、私は途方に暮れています。

4

0 に答える 0