[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-2355?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17914609#comment-17914609
 ] 

Oleg Kalnichevski commented on HTTPCLIENT-2355:
-----------------------------------------------

> wouldn't explicitly setting it to {{HttpVersion.HTTP_1_1}} be clearer and 
> more predictable? Is there a specific reason for preferring {{null}} over 
> {{HttpVersion.HTTP_1_1}} in this case?

[~abernal] We cannot know at this point what protocol version it is going to be 
or even if it is going to be another protocol entirely. All we know the tunnel 
has been established using HTTP/1.0. Setting the protocol version to null 
(undefined) looks the best thing to do here and let the following exec 
interceptors sort out the protocol.

Oleg

> Error "Chunked transfer encoding not allowed for HTTP/1.0" with proxy and 
> HttpClient 5.4
> ----------------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-2355
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2355
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient (classic)
>    Affects Versions: 5.4.1
>            Reporter: V. S.
>            Priority: Major
>             Fix For: 5.4.2, 5.5-alpha1
>
>
> Exception org.apache.hc.core5.http.ProtocolException: "Chunked transfer 
> encoding not allowed for HTTP/1.0" is thrown when sending request through 
> corporate proxy (using Spring's RestClient). That did not occur with 
> HttpClient 5.3.
> Wire protocol (see below) shows proxy replies to CONNECT request with 
> "HTTP/1.{*}0{*} 200 Connection Established". Since 5.4., this protocol 
> version seems to be  interpreted and set on the HTTP connection that is made 
> after establishing the TLS connection through the TCP tunnel set up by the 
> proxy.
> The corporate proxies are very hard to change to e.g. return "HTTP/1.{*}1{*} 
> 200 ..." instead.
>  
> *Wire protocol* (target and proxy host names have been replaced) :
> {{h.i.i.DefaultHttpClientConnectionOperator http-outgoing-0 
> http://PROXY_HOST:8080 connected [...]}}
> {{h.i.i.PoolingHttpClientConnectionManager ep-0000000001 executing exchange 
> ex-0000000001 over http-outgoing-0}}
> {{[...]}}
> {{org.apache.hc.client5.http.wire   http-outgoing-0 >> "CONNECT 
> TARGET_HOST:443 HTTP/1.1[\r][\n]"}}
> {{org.apache.hc.client5.http.wire   http-outgoing-0 >> "Host 
> TARGET_HOST:443[\r][\n]"}}
> {{org.apache.hc.client5.http.wire   http-outgoing-0 >> "User-Agent: 
> ApacheHttpClient/5.4.1 (Java/17.[...])[\r][\n]"}}
> {{org.apache.hc.client5.http.wire   http-outgoing-0 >> "[\r][\n]"}}
> {{org.apache.hc.client5.http.wire   http-outgoing-0 << "HTTP/1.0 200 
> Connection Established[\r][\n]"}}
> {{org.apache.hc.client5.http.wire   http-outgoing-0 << "[\r][\n]"}}
> {{[...]}}
> {{h.i.i.DefaultHttpClientConnectionOperator http-outgoing-0 upgrading to TLS 
> TARGET_HOST:443}}
> {{[...]}}
> {{o.a.h.c.ssl.AbstractClientTlsStrategy Secure session established}}
> {{o.a.h.c.ssl.AbstractClientTlsStrategy negotiated protocol: TLSv1.3}}
> {{[...]}}
> {{h.i.i.DefaultHttpClientConnectionOperator http-outgoing-0 upgraded to TLS 
> TARGET_HOST:443}}
> {{o.a.h.c.h.impl.classic.MainClientExec ex-0000000001 executing POST /path 
> HTTP/1.1}}
> {{h.i.i.DefaultManagedHttpClientConnection http-outgoing-0 close connection 
> IMMEDIATE }}
>  
> *Stack trace:*
> {{org.apache.hc.core5.http.ProtocolException: Chunked transfer encoding not 
> allowed for HTTP/1.0}}
> {{    at 
> org.apache.hc.core5.http.protocol.RequestContent.process(RequestContent.java:127)
>  ~[httpcore5-5.3.1.jar:5.3.1]}}
> {{    at 
> org.apache.hc.core5.http.protocol.DefaultHttpProcessor.process(DefaultHttpProcessor.java:107)
>  ~[httpcore5-5.3.1.jar:5.3.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.MainClientExec.execute(MainClientExec.java:119)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.ConnectExec.execute(ConnectExec.java:199)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.ProtocolExec.execute(ProtocolExec.java:192)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.ContentCompressionExec.execute(ContentCompressionExec.java:150)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.HttpRequestRetryExec.execute(HttpRequestRetryExec.java:113)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.RedirectExec.execute(RedirectExec.java:110)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:174)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:87)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:55)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.apache.hc.client5.http.classic.HttpClient.executeOpen(HttpClient.java:183)
>  ~[httpclient5-5.4.1.jar:5.4.1]}}
> {{    at 
> org.springframework.http.client.HttpComponentsClientHttpRequest.executeInternal(HttpComponentsClientHttpRequest.java:99)
>  ~[spring-web-6.2.1.jar:6.2.1] }}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org
For additional commands, e-mail: dev-h...@hc.apache.org

Reply via email to