Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb610465

Browse files
delegatingresolver: avoid proxy for resolved addresses in NO_PROXY env (#8329) (#8354)
1 parent96c4308 commitb610465

File tree

3 files changed

+172
-258
lines changed

3 files changed

+172
-258
lines changed

‎internal/resolver/delegatingresolver/delegatingresolver.go‎

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -186,30 +186,45 @@ func (r *delegatingResolver) Close() {
186186
r.proxyResolver=nil
187187
}
188188

189-
funcnetworkTypeFromAddr(addr resolver.Address)string {
190-
networkType,ok:=networktype.Get(addr)
191-
if!ok {
192-
networkType,_=transport.ParseDialTarget(addr.Addr)
193-
}
194-
returnnetworkType
195-
}
196-
197-
funcisTCPAddressPresent(state*resolver.State)bool {
189+
funcneedsProxyResolver(state*resolver.State)bool {
198190
for_,addr:=rangestate.Addresses {
199-
ifnetworkType:=networkTypeFromAddr(addr);networkType=="tcp" {
191+
if!skipProxy(addr) {
200192
returntrue
201193
}
202194
}
203195
for_,endpoint:=rangestate.Endpoints {
204196
for_,addr:=rangeendpoint.Addresses {
205-
ifnetworktype:=networkTypeFromAddr(addr);networktype=="tcp" {
197+
if!skipProxy(addr) {
206198
returntrue
207199
}
208200
}
209201
}
210202
returnfalse
211203
}
212204

205+
funcskipProxy(address resolver.Address)bool {
206+
// Avoid proxy when network is not tcp.
207+
networkType,ok:=networktype.Get(address)
208+
if!ok {
209+
networkType,_=transport.ParseDialTarget(address.Addr)
210+
}
211+
ifnetworkType!="tcp" {
212+
returntrue
213+
}
214+
215+
req:=&http.Request{URL:&url.URL{
216+
Scheme:"https",
217+
Host:address.Addr,
218+
}}
219+
// Avoid proxy when address included in `NO_PROXY` environment variable or
220+
// fails to get the proxy address.
221+
url,err:=HTTPSProxyFromEnvironment(req)
222+
iferr!=nil||url==nil {
223+
returntrue
224+
}
225+
returnfalse
226+
}
227+
213228
// updateClientConnStateLocked constructs a combined list of addresses by
214229
// pairing each proxy address with every target address of type TCP. For each
215230
// pair, it creates a new [resolver.Address] using the proxy address and
@@ -240,8 +255,7 @@ func (r *delegatingResolver) updateClientConnStateLocked() error {
240255
}
241256
varaddresses []resolver.Address
242257
for_,targetAddr:=range (*r.targetResolverState).Addresses {
243-
// Avoid proxy when network is not tcp.
244-
ifnetworkType:=networkTypeFromAddr(targetAddr);networkType!="tcp" {
258+
ifskipProxy(targetAddr) {
245259
addresses=append(addresses,targetAddr)
246260
continue
247261
}
@@ -259,7 +273,7 @@ func (r *delegatingResolver) updateClientConnStateLocked() error {
259273
varaddrs []resolver.Address
260274
for_,targetAddr:=rangeendpt.Addresses {
261275
// Avoid proxy when network is not tcp.
262-
ifnetworkType:=networkTypeFromAddr(targetAddr);networkType!="tcp" {
276+
ifskipProxy(targetAddr) {
263277
addrs=append(addrs,targetAddr)
264278
continue
265279
}
@@ -340,9 +354,10 @@ func (r *delegatingResolver) updateTargetResolverState(state resolver.State) err
340354
logger.Infof("Addresses received from target resolver: %v",state.Addresses)
341355
}
342356
r.targetResolverState=&state
343-
// If no addresses returned by resolver have network type as tcp , do not
344-
// wait for proxy update.
345-
if!isTCPAddressPresent(r.targetResolverState) {
357+
// If all addresses returned by the target resolver have a non-TCP network
358+
// type, or are listed in the `NO_PROXY` environment variable, do not wait
359+
// for proxy update.
360+
if!needsProxyResolver(r.targetResolverState) {
346361
returnr.cc.UpdateState(*r.targetResolverState)
347362
}
348363

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp