{"record":{"id":"111477b5da368e24","repo":"XX-net/XX-Net","slug":"s-s-s-status-d-trace-s-111477","errorCode":null,"errorMessage":"%s %s%s status:%d trace:%s","messagePattern":"(.+?) (.+?)(.+?) status:(.+?) trace:(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"code/default/x_tunnel/local/cloudfront_front/front.py","lineNumber":96,"sourceCode":"\n        dispatcher = self.dispatchs[host]\n        return dispatcher\n\n    def request(self, method, host, path=\"/\", headers={}, data=\"\", timeout=120):\n        dispatcher = self.get_dispatcher(host)\n        headers = dict(headers)\n        response = dispatcher.request(method, host, path, headers, data, timeout=timeout)\n        if not response:\n            self.logger.warn(\"req %s get response timeout\", path)\n            return \"\", 602, {}\n\n        status = response.status\n        content = response.task.read_all()\n        if status == 200:\n            self.logger.debug(\"%s %s%s status:%d trace:%s\", method, response.worker.ssl_sock.host, path, status,\n                       response.task.get_trace())\n        else:\n            self.logger.warn(\"%s %s%s status:%d trace:%s\", method, response.worker.ssl_sock.host, path, status,\n                       response.task.get_trace())\n        return content, status, response\n\n    def stop(self):\n        logger.info(\"terminate\")\n        self.connect_manager.set_ssl_created_cb(None)\n        for host in self.dispatchs:\n            dispatcher = self.dispatchs[host]\n            dispatcher.stop()\n        self.connect_manager.stop()\n        self.ip_manager.stop()\n\n        self.running = False\n\n    def set_proxy(self, args):\n        logger.info(\"set_proxy:%s\", args)\n\n        self.config.PROXY_ENABLE = args[\"enable\"]","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/XX-net/XX-Net/blob/cfa5bc17b67676e467f37ec50766127e0ab5f0aa/code/default/x_tunnel/local/cloudfront_front/front.py#L78-L114","documentation":"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.","triggerScenarios":"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.","commonSituations":"CloudFront fronts getting blocked/expired, GAE/IP quota exhausted, misconfigured front list, network middleboxes intercepting TLS.","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"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"status_check = front_dispatcher.request(\"GET\", host, path)\n# dispatcher retries fronts on non-200 automatically","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep the front domain list updated","Monitor front statistic logs for blocked domains"],"tags":["x-tunnel","cloudfront","http-status","proxy"],"backgroundTag":"upstream-http-error","analyzedSha":"cfa5bc17b67676e467f37ec50766127e0ab5f0aa","analyzedAt":"2026-08-27T19:28:28.225Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}