Spring WebClient με Jetty: απλό HTTP proxying χωρίς CONNECT
Χρησιμοποιήστε τον Jetty connector του Spring με αντίστοιχα πρωτόκολλα πελάτη και proxy HTTP/1.1 όταν απαιτείται ένα συνηθισμένο προωθημένο αίτημα HTTP.
Ο χειριστής HTTP proxy του Reactor Netty δημιουργεί σήραγγα CONNECT ακόμη και για έναν απλό προορισμό HTTP. Αν το επιδιωκόμενο proxy δέχεται αντί αυτού συνηθισμένη προώθηση HTTP/1.1, το Spring WebClient μπορεί να χρησιμοποιήσει άλλον υποστηριζόμενο connector.
Για το Spring 6.2 με το client API του Jetty 12.0.35 και συμβατή ενσωμάτωση Jetty Reactive Streams:
var jetty = new org.eclipse.jetty.client.HttpClient(
new org.eclipse.jetty.client.transport.HttpClientTransportOverHTTP());
jetty.getProxyConfiguration().addProxy(
new org.eclipse.jetty.client.HttpProxy("proxy.example", 8080));
var client = WebClient.builder()
.clientConnector(new JettyClientHttpConnector(jetty))
.build();
Τα WebClient και JettyClientHttpConnector είναι κλάσεις του Spring. Διαχειριστείτε την εκκίνηση και τον τερματισμό του παρεχόμενου Jetty client μέσω του κανονικού κύκλου ζωής της εφαρμογής.
Το HTTP/1.1 proxy του Jetty μπορεί να προωθήσει ένα συνηθισμένο αίτημα HTTP/1.1 χωρίς σήραγγα όταν τα πρωτόκολλα προορισμού και client-proxy ταιριάζουν. Η πολιτική requiresTunnel χρησιμοποιεί CONNECT για ασφαλείς προορισμούς και για ασύμβατες διαδρομές πρωτοκόλλου.
Αυτός δεν είναι τρόπος να αφαιρέσετε το CONNECT από μια συνηθισμένη σήραγγα HTTPS. Κρατήστε το σχήμα του προορισμού σωστό.
Χρησιμοποιήστε το addProxy στο αναφερόμενο Jetty API. Το getProxies επιστρέφει μη τροποποιήσιμη λίστα, οπότε η παλαιότερη συνταγή getProxies().add(...) δεν είναι η τρέχουσα διεπαφή μεταβολής.
Για δημόσιους προορισμούς HTTP σε επιτρεπόμενη δημόσια διαδρομή proxy, η λίστα proxy HTTP παρέχει υποψηφίους για το host και τη θύρα του proxy του Jetty. Διαβάστε την πραγματική απόκριση του proxy όταν συγκρίνετε connectors. Ο έλεγχος ταυτότητας, η πολιτική προορισμού και ένας μη διαθέσιμος προορισμός παραμένουν ξεχωριστά από την επιλογή προωθημένου HTTP ή CONNECT.