Spring WebClient ከ Jetty ጋር፦ CONNECT ያለ ተራ HTTP proxy
የ Spring የ Jetty connectorን ከሚመሳሰሉ የ HTTP/1.1 client እና proxy ፕሮቶኮሎች ጋር ተጠቀም፣ ተራ የተላለፈ HTTP ጥያቄ ሲያስፈልግ።
የ Reactor Netty የ HTTP proxy handler ለተራ HTTP መድረሻም ቢሆን CONNECT tunnel ይመሰርታል። የታሰበው proxy በምትኩ ተራ HTTP/1.1 ማስተላለፍን የሚቀበል ከሆነ፣ Spring WebClient ሌላ የሚደገፍ connector ሊጠቀም ይችላል።
ለ Spring 6.2 ከ Jetty 12.0.35 client API እና ተኳኋኝ የ 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 ማስጀመርና ማቆምን በመተግበሪያው የተለመደ የሕይወት ዑደት በኩል አስተዳድር።
የ Jetty HTTP/1.1 proxy ተራ HTTP/1.1 ጥያቄን ያለ tunnel ማስተላለፍ ይችላል፣ የመድረሻውና የ client-proxy ፕሮቶኮሎች ሲመሳሰሉ። የ requiresTunnel ፖሊሲው CONNECT ይጠቀማል ለደህንነቱ የተጠበቁ መድረሻዎችና ለማይኳኋኑ የፕሮቶኮል መንገዶች።
ይህ CONNECT ን ከተራ HTTPS tunnel ለማስወገድ መንገድ አይደለም። የመድረሻውን scheme ትክክል አድርግ።
በተጠቀሰው የ Jetty API ውስጥ addProxy ተጠቀም። getProxies የማይለወጥ ዝርዝር ይመልሳል፣ ስለዚህ የቆየው getProxies().add(...) አሠራር የአሁኑ የማሻሻያ interface አይደለም።
ለህዝብ HTTP መድረሻዎች በተፈቀደ የህዝብ-proxy መንገድ ላይ፣ የ HTTP proxy ዝርዝር ለ Jetty proxy host እና port እጩዎችን ያቀርባል። connectorዎችን ሲያወዳድሩ ትክክለኛውን የ proxy ምላሽ አንብብ። Authentication፣ destination policy እና የማይገኝ target ከ forward HTTP ወይም CONNECT ምርጫ የተለዩ ናቸው።