XX-net/XX-Net · warning
%s %s%s status:%d trace:%s
Error message
%s %s%s status:%d trace:%s
What it means
Logged by x_tunnel's cloudfront_front request() when an HTTP round-trip to the CloudFront worker returns a non-200 status. It is a warning-level diagnostic showing method, worker host, path, status code and trace, not an exception. It means the front endpoint answered but rejected/failed the request.
Source
Thrown at code/default/x_tunnel/local/cloudfront_front/front.py:96
dispatcher = self.dispatchs[host]
return dispatcher
def request(self, method, host, path="/", headers={}, data="", timeout=120):
dispatcher = self.get_dispatcher(host)
headers = dict(headers)
response = dispatcher.request(method, host, path, headers, data, timeout=timeout)
if not response:
self.logger.warn("req %s get response timeout", path)
return "", 602, {}
status = response.status
content = response.task.read_all()
if status == 200:
self.logger.debug("%s %s%s status:%d trace:%s", method, response.worker.ssl_sock.host, path, status,
response.task.get_trace())
else:
self.logger.warn("%s %s%s status:%d trace:%s", method, response.worker.ssl_sock.host, path, status,
response.task.get_trace())
return content, status, response
def stop(self):
logger.info("terminate")
self.connect_manager.set_ssl_created_cb(None)
for host in self.dispatchs:
dispatcher = self.dispatchs[host]
dispatcher.stop()
self.connect_manager.stop()
self.ip_manager.stop()
self.running = False
def set_proxy(self, args):
logger.info("set_proxy:%s", args)
self.config.PROXY_ENABLE = args["enable"]View on GitHub (pinned to cfa5bc17b6)
Solutions
- Check the trace/status: 403/521 usually means the CloudFront domain is blocked — update front domains
- Run the front statistic/update thread to fetch new working fronts
- If persistent across all fronts, the x-tunnel server or account may be down/out of quota
- Retry via front_dispatcher.request which loops with other fronts
Defensive patterns
Strategy: retry
Validate before calling
status_check = front_dispatcher.request("GET", host, path)
# dispatcher retries fronts on non-200 automatically Prevention
- Keep the front domain list updated
- Monitor front statistic logs for blocked domains
When it happens
Trigger: Calling front.request() (or front_dispatcher.request) where the CloudFront worker responds with status != 200: worker quota exceeded, CloudFront blocked the domain, backend xx-net server down, or IP rate-limited by CloudFront.
Common situations: CloudFront fronts getting blocked/expired, GAE/IP quota exhausted, misconfigured front list, network middleboxes intercepting TLS.
Related errors
AI-assisted analysis of XX-net/XX-Net@cfa5bc17b6 (2026-08-27).
Data as JSON: /api/errors/111477b5da368e24.
Report an issue: GitHub.