Uploaded image for project: 'JBoss Core Services'
  1. JBoss Core Services
  2. JBCS-717

Impossible to disable insertion of header=expect=100-Continue in proxied requests

XMLWordPrintable

    • 16
    • Release Notes
    • +
    • Workaround Exists
    • Hide

      -Proxy over AJP
      or
      -SetEnv force-proxy-request-1.0 1

      Show
      -Proxy over AJP or -SetEnv force-proxy-request-1.0 1
    • Hide

      Verified by deploying a test app into EAP which processes GET and POST requests, with a processing duration deliberately exceeding the httpd timeout value. The problem appears only for POST requests (i.e. requests which feature a expect=100-continue/HTTP 100 interaction).

      • In case of GET with EAP processing time exceeding the httpd timeout, httpd correctly goes:

        [Tue Aug 29 17:27:40.150081 2017] [proxy_http:error] [pid 25663:tid 140700284864256] (70007)The timeout specified has expired: [client [clientip]:64649] AH01102: error reading status line from remote server [ashost]:12110
        [Tue Aug 29 17:27:40.150132 2017] [proxy:error] [pid 25663:tid 140700284864256] [client [clientip]:64649] AH00898: Error reading from remote server returned by /jboss-helloworld/HelloWorld

      • In case of POST with EAP processing time exceeding the httpd timeout, httpd incorrectly goes:

        [Tue Aug 29 17:35:05.286697 2017] [proxy_http:error] [pid 25663:tid 140700268078848] (70007)The timeout specified has expired: [client [clientip]:54016] AH01102: error reading status line from remote server [ashost]:12110
        [Tue Aug 29 17:35:05.287424 2017] [proxy:error] [pid 25663:tid 140700268078848] [client [clientip]:54016] AH00898: Timeout on 100-Continue returned by /jboss-helloworld/HelloWorld
        [Tue Aug 29 17:35:05.287797 2017] [:error] [pid 25663:tid 140700268078848] proxy: CLUSTER: (balancer://clstcmbalancer). All workers are in error state

      httpd BZ 59007 looks to be describing the same issue.

      Show
      Verified by deploying a test app into EAP which processes GET and POST requests, with a processing duration deliberately exceeding the httpd timeout value. The problem appears only for POST requests (i.e. requests which feature a expect=100-continue/HTTP 100 interaction). In case of GET with EAP processing time exceeding the httpd timeout, httpd correctly goes: [Tue Aug 29 17:27:40.150081 2017] [proxy_http:error] [pid 25663:tid 140700284864256] (70007)The timeout specified has expired: [client [clientip] :64649] AH01102: error reading status line from remote server [ashost] :12110 [Tue Aug 29 17:27:40.150132 2017] [proxy:error] [pid 25663:tid 140700284864256] [client [clientip] :64649] AH00898: Error reading from remote server returned by /jboss-helloworld/HelloWorld In case of POST with EAP processing time exceeding the httpd timeout, httpd incorrectly goes: [Tue Aug 29 17:35:05.286697 2017] [proxy_http:error] [pid 25663:tid 140700268078848] (70007)The timeout specified has expired: [client [clientip] :54016] AH01102: error reading status line from remote server [ashost] :12110 [Tue Aug 29 17:35:05.287424 2017] [proxy:error] [pid 25663:tid 140700268078848] [client [clientip] :54016] AH00898: Timeout on 100-Continue returned by /jboss-helloworld/HelloWorld [Tue Aug 29 17:35:05.287797 2017] [:error] [pid 25663:tid 140700268078848] proxy: CLUSTER: (balancer://clstcmbalancer). All workers are in error state httpd BZ 59007 looks to be describing the same issue.

      • httpd/mod_proxy inserts a header expect=100-Continue in the proxied requests to EAP. This apparently happens consistently for all http POST requests (i.e. not GET).
      • This header insertion did not occur in httpd 2.2; it is new in 2.4 (mentioned in mod_proxy documentation for proxying over HTTP as the "ping" feature).
      • It seems impossible to prevent the header insertion, neither through httpd config (e.g. via the ProxyPass ping=0 option), nor via the EAP mod_cluster subsystem config (ping option there as well).
      • EAP responds almost immediately with an intermediary status HTTP 100 (proven through httpd debug logs which show the reception of this HTTP 100).
      • When EAP does not answer "on time" to the actual request (body) e.g. with a HTTP 200 or other, httpd reports:
        • [proxy:error] AH00898: Timeout on 100-Continue returned by (the URL)
        • and then [:error] proxy: CLUSTER: (balancer://clstcmbalancer). All workers are in error state
        • thereafter rejecting all requests from all users until the worker is made back available after some time.

            gzaronik@redhat.com George Zaronikas
            jkasik@redhat.com Jan Kašík
            Paul Lodge Paul Lodge
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated:
              Resolved: