Apache and mod_proxy not handling HTTP 100-continue from client HTTP 417

前端 未结 2 1533
無奈伤痛
無奈伤痛 2021-02-08 07:44

\'m building some webby magic and am using Apache to front our tomcat server, forwarding requests to tomcat on port 8080. I have an issue using Apache and mod_proxy to forward r

相关标签:
2条回答
  • 2021-02-08 08:27

    In our realy particular case, it was the proxy answering with 417. Then again, the deploy seemed to have ignored the nonProxyHosts settings. Effectively, we had run into this bug: https://github.com/mojohaus/jaxb2-maven-plugin/issues/60 thus jaxb2-maven-plugin mangled our proxy settings, and the proxy answered 417.

    mvn clean deploy
    

    failed. While

    mvn deploy
    

    worked. Best workaround I found (see issue linked above) was to use a different wagon which does not get broken by jaxb2-maven-plugin (version 2.4 still known to have this proxy bug):

    <extensions>
        <extension>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-http-lightweight</artifactId>
            <version>3.3.2</version>
        </extension>
    </extensions>
    
    0 讨论(0)
  • 2021-02-08 08:47

    Apache has a known and unresolved issue with Expect headers, see bug 46709 and bug 47087.

    The issue is that some clients set the Expect header and only send the request headers before a PUT or POST of data. This allows the server to respond to errors/redirects/security violations prior to the client sending the request body (PUT or POST data). This is a laudable goal, but apparently, the client does not wait until it gets a response and just pushes out the body of the request, which results in the 417 error.

    If you have control over a .NET client you can use ServicePointManager.Expect100Continue Property set to false, to override this behavior.

    If you only have control over the server, it looks like you can either force HTTP 1.0 for those clients (perhaps based on user agent string) or force unset the Expect header using mod_header early on in the request.

    To remove the Expect header from the request early using mod_headers use this config directive:

    <IfModule mod_headers.c>
    RequestHeader unset Expect early
    </IfModule>
    

    This works because the client is not actually waiting for the "100 Continue" response and acting as if the Expect header were not set.

    0 讨论(0)
提交回复
热议问题