On Wed, Dec 8, 2021 at 2:42 PM Ruediger Pluem <rpl...@apache.org> wrote:
>
>
> On 12/8/21 2:26 PM, Ruediger Pluem wrote:
> >
> >
> > On 11/3/19 4:48 PM, yla...@apache.org wrote:
> >> Author: ylavic
>
> >>
> >> +    rc = ap_proxy_tunnel_run(tunnel);
> >> +    if (ap_is_HTTP_ERROR(rc)) {
> >> +        /* Don't send an error page if we sent data already */
> >> +        if (proxyport && !tunnel->replied) {
> >> +            return rc;
> >>          }
> >> -    } while (!done);
> >> -
> >> -    ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r,
> >> -                  "finished with poll() - cleaning up");
> >> +        /* Custom log may need this, still */
> >> +        r->status = rc;
> >
> > I have some lively discussions outside this forum on the consequences the 
> > above line has.
> > In fact this means that even though we replied to the client with a 200 on 
> > its CONNECT request we might log a different status
> > code if something goes wrong during the tunneling. In contrast to this we 
> > don't do this for other other methods e.g. GET or POST:
> > Once we sent the status code to the client we do not log a different one 
> > should something go wrong while delivering the response.
> > Removing r->status = rc is IMHO enough to align the behavior again.
> >
> > Thoughts?
> >
>
> BTW: We do a similar thing in mod_proxy_http.c in the backend replied with 
> Switching Protocols:
>
>             status = ap_proxy_tunnel_run(tunnel);
>             if (ap_is_HTTP_ERROR(status)) {
>                 /* Tunnel always return HTTP_GATEWAY_TIME_OUT on timeout,
>                  * but we can differentiate between client and backend here.
>                  */
>                 if (status == HTTP_GATEWAY_TIME_OUT
>                         && tunnel->timeout == client_timeout) {
>                     status = HTTP_REQUEST_TIME_OUT;
>                 }
>             }
>             else {
>                 /* Update r->status for custom log */
>                 status = HTTP_SWITCHING_PROTOCOLS;
>             }
>             r->status = status;
>
> Hence we have the same sort of different behavior compared to "ordinary" 
> requests here as well. Hence should we align here as well
> and always log HTTP_SWITCHING_PROTOCOLS no matter if there was an error while 
> tunneling the protocol?

I think you are right, the goal was to show in the access_log how
tunneling went (primary for the Upgrade case, didn't think too much of
CONNECT actually :/), but if worthy it looks better to have a new
r->async_status for that because we are missing the initial status
now..

Regards;
Yann.

Reply via email to