alibaba/nacos · error · IllegalArgumentException

Unsupported http method

Error message

Unsupported http method : {name}

What it means

Thrown by BaseHttpMethod.sourceOf() as an IllegalArgumentException when the provided method name does not match any of the supported HTTP methods (case-insensitive). Supported methods: GET, GET_LARGE, POST, PUT, DELETE, DELETE_LARGE, HEAD, TRACE, PATCH, OPTIONS. This is used internally by the Nacos HTTP client to map method name strings to enum values.

Solutions

  1. Check the method name from the exception message and use one of the supported values: GET, POST, PUT, DELETE, HEAD, TRACE, PATCH, OPTIONS (or GET_LARGE / DELETE_LARGE for body-carrying variants).
  2. If you need CONNECT or a custom method, it is not supported by this enum-based dispatch; use the underlying Apache HttpClient directly.

Example fix

// before
BaseHttpMethod method = BaseHttpMethod.sourceOf("CONNECT");

// after
BaseHttpMethod method = BaseHttpMethod.sourceOf("POST");
Defensive patterns

Strategy: validation

Validate before calling

Set<String> validMethods = Set.of("GET", "GET_LARGE", "POST", "PUT", "DELETE",
    "DELETE_LARGE", "HEAD", "TRACE", "PATCH", "OPTIONS");
if (!validMethods.contains(methodName.toUpperCase())) {
    throw new IllegalArgumentException("Unsupported HTTP method: " + methodName
        + ". Supported: " + validMethods);
}

Try / catch

try {
    BaseHttpMethod method = BaseHttpMethod.sourceOf(name);
} catch (IllegalArgumentException e) {
    if (e.getMessage().contains("Unsupported http method")) {
        // Default to GET or reject the request
        method = BaseHttpMethod.GET;
    } else {
        throw e;
    }
}

Prevention

When it happens

Trigger: Passing a method name like 'CONNECT', 'get_large' (wrong case handled but typo matters), or any non-standard HTTP verb to sourceOf(). A null input would cause a NullPointerException before reaching the throw.

Common situations: Custom HTTP interceptors or proxy layers injecting non-standard method names; typo in method configuration; outdated method names from older Nacos versions.

Related errors


AI-assisted analysis of alibaba/nacos@9b989acdf1 (2026-08-14). Data as JSON: /api/errors/bb862a92099e75ec. Report an issue: GitHub.

Appendix: source

Thrown at common/src/main/java/com/alibaba/nacos/common/http/BaseHttpMethod.java:172

    }
    
    protected HttpUriRequestBase createRequest(String url) {
        throw new UnsupportedOperationException();
    }
    
    /**
     * Value of {@link BaseHttpMethod}.
     *
     * @param name method name
     * @return {@link BaseHttpMethod}
     */
    public static BaseHttpMethod sourceOf(String name) {
        for (BaseHttpMethod method : BaseHttpMethod.values()) {
            if (StringUtils.equalsIgnoreCase(name, method.name)) {
                return method;
            }
        }
        throw new IllegalArgumentException("Unsupported http method : " + name);
    }
    
    /**
     * get Large implemented.
     * <p>
     * Mainly used for GET request parameters are relatively large, can not be placed on the URL, so it needs to be
     * placed in the body.
     * </p>
     */
    public static class HttpGetWithEntity extends HttpUriRequestBase {
        
        public static final String METHOD_NAME = "GET";
        
        public HttpGetWithEntity(String url) {
            super(METHOD_NAME, URI.create(url));
        }
    }
    

View on GitHub (pinned to 9b989acdf1)