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

  1. Check the trace/status: 403/521 usually means the CloudFront domain is blocked — update front domains
  2. Run the front statistic/update thread to fetch new working fronts
  3. If persistent across all fronts, the x-tunnel server or account may be down/out of quota
  4. 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

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.