protected void duplicate(final HttpHeaders headers, final String header, final HeaderUniqueStrategyEnum strategy) {
        List<String> headerValues = headers.get(header);
        if (Objects.isNull(headerValues) || headerValues.size() <= 1) {
            return;
        }
        switch (strategy) {
            case RETAIN_FIRST:
                headers.set(header, headerValues.get(0));
                break;
            case RETAIN_LAST:
                headers.set(header, headerValues.get(headerValues.size() - 1));
                break;
            case RETAIN_UNIQUE:
                headers.put(header, new ArrayList<>(new LinkedHashSet<>(headerValues)));
                break;
            default:
                throw new IllegalStateException("Unexpected value: " + strategy);
        }
    }
Process the Web request.

@param exchange    the current server exchange
@param httpMethod  http method, eg.POST
@param uri         the request uri
@param body        the request body
@return {@code Mono<Void>} to indicate when request processing is complete
shenyu-plugin/shenyu-plugin-httpclient/src/main/java/org/apache/shenyu/plugin/httpclient/AbstractHttpClientPlugin.java