[BUG] Align OkHttp and Netty handling of HTTP 407 responses after HTTPS tunnel establishment
I maintainer di solito rispondono entro 1 giorno
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Describe the bug
The OkHttp and Netty HTTP transports handle an HTTP 407 response differently when it is returned by an HTTPS endpoint after an HTTP proxy CONNECT tunnel has already been established.
The response is an endpoint response received over the established TLS connection, not a response to the proxy CONNECT request. However, the OkHttp path can invoke proxy-specific handling and issue a follow-up request, while the Netty path treats it as an endpoint response without restarting proxy negotiation.
This issue tracks consistent HTTP response handling when applications switch between transports.
Exception or Stack Trace
Not applicable. This is a response-handling and retry-behavior difference rather than an exception report.
To Reproduce
Use a controlled local test environment:
- Configure an HTTP proxy and an HTTPS test endpoint.
- Allow proxy CONNECT negotiation and TLS establishment to complete normally.
- Have the HTTPS test endpoint return HTTP 407 (
Proxy Authentication Required) over the established TLS connection. - Send the same request using
azure-core-http-okhttpandazure-core-http-nettywith equivalent proxy settings. - Compare the transport-level response handling and whether a proxy-related follow-up is attempted.
The behavior below is based on implementation review; these steps have not been run locally for this tracking issue.
| Transport | Behavior for the endpoint-generated 407 after tunnel establishment |
|---|---|
| OkHttp | OkHttp can invoke the configured proxy authenticator for this response. The SDK authenticator does not distinguish it from a CONNECT-phase response and can produce a proxy-related follow-up request. |
| Netty | Proxy negotiation is handled during CONNECT. Once the tunnel is established, an endpoint-generated 407 does not re-enter the proxy authentication path; it remains an endpoint response for the SDK pipeline/caller to handle. |
Code Snippet
No application snippet is included. The HTTPS test fixture should return status 407 after successful CONNECT and TLS establishment. Use existing proxy test fixtures and compare transport-level behavior independently of service-specific retry policies.
Expected behavior
An endpoint-generated HTTP 407 received inside an established HTTPS tunnel should not restart proxy negotiation. OkHttp and Netty should behave consistently for this scenario.
Acceptance criteria:
- Align OkHttp post-tunnel 407 handling with Netty's connection-phase behavior.
- Preserve normal handling of genuine proxy 407 responses during CONNECT.
- Preserve supported cleartext HTTP proxy behavior.
- Add regression tests for post-tunnel 407 responses, including reuse of an established connection.
- Cover HTTP/1.1 and HTTP/2 endpoint connections where supported.
Screenshots
Not applicable.
Setup (please complete the following information):
- OS: Not OS-specific; implementation review.
- IDE: Not applicable.
- Library/Libraries:
com.azure:azure-core-http-okhttp(reviewed at1.14.0-beta.1, with OkHttp4.12.0) andcom.azure:azure-core-http-nettyfor behavior comparison. - Java version: No local runtime reproduction performed for this tracking issue.
- App Server/Environment: Java application using an Azure SDK HTTP transport through an HTTP proxy to a controlled HTTPS endpoint.
- Frameworks: None required.
A dependency version mismatch is not suspected. Dependency-tree output and exception logs are not applicable to this tracking issue.
Additional context
Review the OkHttp ProxyAuthenticator and its builder integration against the Netty proxy handling lifecycle. The goal is transport parity and predictable response handling, not a public API change. Keep the change focused on distinguishing CONNECT-phase responses from endpoint responses and adding related regression coverage.
Information Checklist
- Bug Description Added
- Repro Steps Added (controlled test scenario provided; not executed locally)
- Setup information Added
- Lingua principale
- Java
- Stelle
- 2.6k
- Fork
- 2.2k
- Merge medio
- 1g 18h
- PR unite (30g)
- 231
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Azure/azure-sdk-for-java
-
mgmt, in track 1 migration guide, call out that file-based authentication method is not recommendedForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. ApertaAzure.Identity
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 74/100
Azure/azure-sdk-for-java#48894 ·
I maintainer di solito rispondono entro 1 giorno
-
Azure.Core HttpClient
Difficoltà 4/5 3-5 giorni Idoneità per principianti 52/100
Azure/azure-sdk-for-java#50961 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Azure.Core.V2 clientcore
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
Azure/azure-sdk-for-java#50936 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Paging extenisonsApertaclientcore
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
Azure/azure-sdk-for-java#50935 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
clientcore
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
Azure/azure-sdk-for-java#50934 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di Azure/azure-sdk-for-java
Issue simili
-
staticAssetsPath follows symlinks outside the directory on WindowsForse già presa @ybelMekk l’ha presa oggi. Apertabug security findings
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
navikt/mock-oauth2-server#1132 ·
I maintainer di solito rispondono entro 1 giorno
-
agent:working follow-up
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Sanne/incus-spawn#1683 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
checkstyle/checkstyle#22210 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
google/error-prone#6239 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[Failing Test]: BigqueryClient.queryUnflattened fails BigQuery ITs on a transient 503Forse già presa @mxtymoshyk l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
I maintainer di solito rispondono entro 1 giorno