2017-03-08 16 views
0

Tomcat7は、Expectationが失敗した明示的だが空のExpectヘッダを持つカールPOSTに応答しています。Expectヘッダが空の場合にTomcat7がPOSTSを拒否する

curl -v -H "Expect;" <URL> 

Tomcatは

> POST <...> HTTP/1.1 
> Host: <...> 
> User-Agent: curl/7.53.0 
> Accept: */* 
> Expect: 
> 
< HTTP/1.1 417 Expectation Failed 
< Server: Apache-Coyote/1.1 
< Transfer-Encoding: chunked 

に応答しかし、Tomcat6は、このPOSTを受け入れました。私は明らかにTomcat7にアップグレードしようとしていますが、これらの空のヘッダを追加するパブリックドメイン(変更不可能)の製品を持っています。

これらの空のExpectヘッダーを受け入れるようにTomcat7を設定する方法はありますか?

答えて

1

残念ながら、Tomcat7を設定して、Expectヘッダーチェックを無効にする方法はありません。これを無効にする唯一の方法は、Tomcat7のソースコードを変更し、独自のバージョンを再構築することです。

関連するコードがapache-tomcat-7.0.75-src/java/org/apache/coyote/http11/AbstractHttp11Processor.java次の場所にあります。

MessageBytes expectMB = null; 
    if (http11) { 
     expectMB = headers.getValue("expect"); 
    } 
    if (expectMB != null) { 
     if (expectMB.indexOfIgnoreCase("100-continue", 0) != -1) { 
      getInputBuffer().setSwallowInput(false); 
      expectation = true; 
     } else { 
      response.setStatus(HttpServletResponse.SC_EXPECTATION_FAILED); 
      setErrorState(ErrorState.CLOSE_CLEAN, null); 
     } 
    } 

Expectヘッダチェックを無効にする設定オプションがありません表示されます。問題を解決するには、これらのコードを削除する必要があります。

このTomcat7の動作は、HTTP標準に準拠するように設計されています。 Tomcat 7.0.55(https://tomcat.apache.org/tomcat-7.0-doc/changelog.html)でリリースされました: "要求に認識できないExpectヘッダーが含まれている場合、RFC2616の章14.20によるとエラー417(Expectation Failed)で応答します。"

+0

Hmmm、それはかなり決定的なようです。ありがたいことに、残念ながらセキュリティチームがカスタムビルドを許可しないと確信しています。その周りに別の方法を見つける時間。 – Jumwah

関連する問題