First, identify which layer is failing
“Update Subscription” in a Clash client is not a single-step operation. After you click update, the client reads the saved subscription URL, requests the remote content over the network, checks whether it can be parsed as a Clash configuration, and only then replaces the local copy. A failure at any layer may appear simply as “Update failed,” but the fix depends on where it occurred.
Do not delete the current configuration before troubleshooting. Most clients keep the last successfully downloaded local copy, so loaded nodes and rules usually remain usable even when the remote source is temporarily unavailable. Deleting the configuration removes that working copy too and can make recovery more difficult.
Use the error message to narrow down the cause
| UI message or log keyword | What it usually means | Check first |
|---|---|---|
| timeout、deadline exceeded、i/o timeout | The request did not finish within the allowed time | Network route, DNS, and the proxy update setting |
| 404、Not Found | The server could not find the subscription URL | Whether the link has expired and was copied completely |
| 401、403、Forbidden | Authentication details are invalid or the server rejected the request | Regenerate the subscription and check device or rate limits |
| connection refused | The target port refused the connection, or the update request was incorrectly sent to a local proxy | Ports such as 7890 and 7891, plus proxy settings |
| unexpected EOF、connection reset | The connection was closed during transfer | Network stability, repeated requests, and server status |
| YAML、parse、unmarshal | The content downloaded, but could not be parsed | Whether the response is actually Clash YAML |
Determine whether the failure is in downloading or parsing
Download failures usually include a domain, connection error, timeout, or HTTP status code in the log. Parse failures more often mention a YAML line number, field name, or type mismatch. For example, a successful request may return a login page with HTTP status 200, but because the first line is HTML, the client fails during parsing.
If the client lets you inspect the configuration file, open the newly downloaded content and check its beginning. A standard Clash or mihomo configuration usually includes fields such as proxies, proxy-groups, and rules. If you see only webpage code, an error message, or an account login page, the subscription URL did not return a loadable configuration.
mixed-port: 7890
mode: rule
proxies:
- name: Example
type: ss
proxy-groups:
- name: PROXY
type: select
rules:
- MATCH,PROXY
The simplified example above is only for recognizing the structure and should not replace a real subscription. Configurations from different services may also include DNS settings, rule providers, health checks, and many node fields.
How to troubleshoot Clash subscription update timeouts
A timeout means the client did not receive a complete response within the allowed period. The subscription domain may not resolve, the direct route may be unreachable, a proxy node may be unavailable, or the client may have “Update via proxy” enabled while the proxy itself has not established a usable connection. Following a fixed order is usually faster than repeatedly switching nodes.
Step 1: Test direct and proxy updates separately
Menu names vary by client. Common locations include Settings → Preferences → Subscriptions, or an update menu in the top-right corner of the configuration page. Look for a switch labeled “Update via proxy,” “Use proxy for subscription updates,” or “Proxy Subscription Update.”
- First disable “Update via proxy,” save the change, and run one manual update. The request will then use the system’s current direct network connection whenever possible.
- If it still times out, enable the switch, select a node you have confirmed is working, and update again.
- Do not switch between the two methods rapidly. Wait for each request to finish and record which method succeeds.
If direct updating fails but proxy updating works, the subscription domain is probably unstable on the current network. If direct updating works but proxy updating fails, check the node, proxy group, and local port. If both fail, continue by checking the URL, DNS, and server status.
Step 2: Check the local proxy port
Many Clash clients use 7890 as the default mixed port. The HTTP port is often 7890, and the SOCKS5 port is often 7891, but these values can be changed. If the operating system, browser, or another download tool still points to a closed port, the subscription request may return connection refused.
- In the client, open Settings → Network Settings or Ports and check the current Mixed Port, HTTP Port, and SOCKS Port.
- Make sure the system proxy host is usually
127.0.0.1, and that its port matches the port the client is actually listening on. - Do not run two Clash clients that use the same port. During a port conflict, the client started second may fail to listen.
- If you have just changed the port, turn the system proxy off and on again so the operating system writes the correct address again.
Step 3: Rule out DNS and network-switching issues
After switching from a company network to a phone hotspot or from Wi-Fi to Ethernet, old connections and DNS cache entries may linger temporarily. Fully exit the client, disconnect and reconnect the network, then start the client and test again. Closing the window may not fully exit the app; confirm that its process has ended in the system tray or menu bar.
If the log shows no such host, server misbehaving, or a DNS resolution timeout, first check whether ordinary webpages open. If TUN mode is enabled, temporarily disable TUN and test subscription updates with only the regular system proxy enabled. If updates work after TUN is disabled, inspect TUN’s DNS hijacking, Fake-IP range, and nameserver settings instead of reinstalling the client.
What to do with 404, 401, and 403 errors
An HTTP status code confirms that the request reached the server, so the focus should shift from the local port to the subscription URL and server authorization. A 404 usually means the address does not exist, 401 means valid authentication is missing, and 403 means the server understood the request but refused to provide the content.
404: The subscription link expired or was copied incorrectly
Subscription links often contain long paths and query parameters, such as a token, client type, or configuration format. Line breaks in chat apps, truncation in the browser address bar, or a missing final character can turn a valid address into a 404. Do not compare only the domain; verify the entire URL character by character, starting with https://.
- Return to the subscription provider’s management page and copy the subscription URL for Clash or mihomo again.
- Open the edit menu for the original configuration in the client’s configuration list, replace the URL, and save.
- If the client cannot edit a URL, create a new remote configuration and import the new link.
- Delete the invalid old entry only after the new configuration updates successfully and nodes can be switched normally.
If the link still returns 404 after copying it again, open it directly in a browser and inspect the result. A YAML download or configuration text indicates that the address works. A login page, plan page, or website homepage may mean you copied a management-page URL instead of the subscription endpoint.
401 and 403: Authentication or access restrictions
A 401 commonly results from an expired token, a changed account status, or a reset subscription URL. Besides authorization issues, a 403 may be caused by request frequency, the source network, or a device-count limit. Changing Clash’s proxy port usually cannot fix this type of problem.
- Generate a new subscription link from the service page instead of continuing to use an old saved URL.
- Stop refreshing repeatedly within a short period. Wait at least 5 minutes before running another test.
- Check the account’s validity period, traffic status, and whether the provider has posted a maintenance notice for its API.
- If the link downloads in a browser but the client returns 403, first try disabling proxy updates to rule out restrictions on the proxy exit address.
- If direct access returns 403 while proxy updates work, you can keep proxy updates enabled, but choose a stable proxy group instead of an auto-selected node with highly variable latency.
A 200 response still fails: check the configuration format and content
HTTP 200 only means the server successfully returned some content; it does not mean that content is a Clash configuration. A webpage error page, a Base64 node list, or a format intended for another client may all return 200 and then fail during parsing.
Recognize common parse errors
| Symptom | Possible cause | What to do |
|---|---|---|
| A YAML syntax error appears near the first line | The response is HTML, a JSON error message, or truncated content | Inspect the raw response and obtain the correct subscription URL again |
| The message says proxies or proxy-groups are missing | The subscription is not a complete Clash configuration | Choose the Clash, Clash Meta, or mihomo format |
| The message says unknown field | The configuration uses a field unsupported by the current core | Update the client or switch to a compatible format |
| The message says mapping values or bad indentation | YAML indentation is damaged or manual editing introduced an error | Restore the original remote configuration and avoid tab indentation |
| The downloaded content is a single line of encoded text | It may be a generic Base64 node subscription | Choose a Clash-specific link on the service page |
mihomo supports a broader range of rule-provider, proxy-provider, and DNS fields than early Clash cores. If a subscription is labeled mihomo or Clash Meta but the client still uses an older core, some fields may be unrecognized. First check the core type and version under Settings → Core or About, then choose the matching subscription format.
Do not randomly delete unfamiliar fields just to clear an error. Some fields control rule providers, DNS routing, or node health checks; removing them may change traffic routing even if the configuration loads. A safer approach is to upgrade to a client that supports the format or have the subscription service generate a compatible configuration.
How to choose a better auto-update interval
More frequent automatic updates are not always better. Nodes and rules usually do not change minute by minute, while short intervals create duplicate requests and make server-side rate limits more likely. For personal devices, 6–24 hours is a more typical range.
| Use case | Suggested interval | Notes |
|---|---|---|
| Everyday personal computer | 12 hours | Balances node changes with request frequency |
| Laptop used occasionally | 24 hours | A manual update after startup is usually enough |
| Nodes change frequently | 6 hours | Do not shorten the interval to a few minutes |
| Fixed rules and self-hosted nodes | 24–72 hours | The configuration changes infrequently, so updates can be less frequent |
| Troubleshooting an issue | Temporarily disable auto-update | Prevents scheduled tasks from overwriting logs and test results |
Set the update interval in the client
A common path is to open the Configuration or Subscriptions page, open the edit menu for the remote configuration, and set the auto-update interval in hours. Some clients use seconds: 6 hours is 21600 seconds, 12 hours is 43200 seconds, and 24 hours is 86400 seconds. If the field is explicitly labeled in minutes, enter 360, 720, or 1440 respectively; do not mix units.
After saving, check whether the next scheduled update time matches your expectation. Some clients run scheduled updates only while the program is open and do not catch up on every task while the computer is shut down. Run one update after restarting; there is no need to set an extremely short interval.
Should “Update via proxy” stay enabled?
Whether to enable it depends on the subscription domain’s actual reachability. When direct access is stable, disabling proxy updates is simpler and avoids a failed current node blocking refreshes. Keep it enabled only when the subscription requires a proxy route or direct access frequently times out.
- Direct updates are stable: disable “Update via proxy” and set the interval to 12 or 24 hours.
- Direct updates time out but proxy access is stable: enable proxy updates and route update traffic through a stable proxy group.
- You switch networks often: prefer direct updates and manually switch to proxy updates only when needed.
- All current nodes are unavailable: disable proxy updates so requests are not sent through a failed proxy.
How to confirm the configuration is really active after fixing it
“Update successful” in the UI only means the new file was saved. You must also confirm that the client actually loaded it. Some clients switch automatically after downloading, while others continue using the old configuration until you select the new entry manually.
- Check the “Last Updated” time in the configuration list and confirm it matches the time of your recent action.
- Select the updated configuration and wait for the core to finish reloading.
- Open the proxy page and check whether the node count, proxy group names, or rules have changed as expected.
- Run a latency test on a frequently used node. The latency only shows that the test address is reachable; it does not mean every website will be accessible.
- Keep “Rule mode” enabled, visit one destination that should use a direct connection and one that should use a proxy, and verify the routing results.
- Review the runtime log and confirm that parse errors, DNS loops, or connection refusals are not recurring.
Final checklist if updates still fail
- Was the subscription URL copied again from the service page, with no spaces, line breaks, or missing characters at either end?
- When opened in a browser, does the address return configuration text or a download rather than a login page?
- Have you tested direct and proxy updates separately instead of repeatedly trying only one route?
- Does the system proxy port match the client’s actual listening port, and are 7890 or 7891 occupied by another program?
- Can the subscription update when TUN is disabled? If so, continue checking DNS hijacking and the TUN stack settings.
- Does the subscription format match the Clash, Clash Meta, or mihomo core?
- Is the auto-update interval too short, potentially triggering a 403 or temporary restriction through repeated requests?
- After the update succeeded, did you manually select the new configuration and confirm that the core finished reloading?
The most effective way to troubleshoot a subscription failure is to separate network, authorization, and format problems by status code, then compare direct and proxy update paths. For timeouts, check the network and proxy setting first; for 404, obtain the complete link again; for 401 or 403, check authorization and request frequency; for parse errors, verify the returned content and core format. Set auto-updates to 6–24 hours and keep the latest working configuration to reduce the impact of recurring failures.