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?


Regards

Rüdiger


Reply via email to