We use Rest protocol more year.

最近我们尝试使用skywalking作为调用跟踪，结果发现rest协议下的Dubbo-Attachments有限制

"The attachments of RpcContext must not contain  , or = "

我认为这应该是一个bug。没有考虑传入的Attachments的格式。只是简单的用,和=进行分割。
通常在外部调用可能只是像getAttachments().put("contextData", contextDataStr);这样去调用。DataStr的格式只有在rest的时候才有限制。这是不合理的。

异常抛出在
dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/RpcContextFilter.java

是应该修复这个问题吗？

刚和Skywalking的人讨论了一会，认为是协议层不应该有格式上面的限制。

https://github.com/apache/skywalking/issues/3294
String key = entry.getKey();
            String value = entry.getValue();
            if (illegalForRest(key) || illegalForRest(value)) {
                throw new IllegalArgumentException("The attachments of " + RpcContext.class.getSimpleName() + " must not contain ',' or '=' when using rest protocol");
            }
            
            if (value != null) {
                size += value.getBytes(StandardCharsets.UTF_8).length;
            }
            if (size > MAX_HEADER_SIZE) {
                throw new IllegalArgumentException("The attachments of " + RpcContext.class.getSimpleName() + " is too big");
            }
            String attachments = key + "=" + value;
            requestContext.getHeaders().add(DUBBO_ATTACHMENT_HEADER, attachments);
        }
    }
    /**
     * If a string value illegal for rest protocol(',' and '=' is illegal for rest protocol).
     *
     * @param v string value
     * @return true for illegal
     */
    private boolean illegalForRest(String v) {
        if (StringUtils.isNotEmpty(v)) {
            return v.contains(",") || v.contains("=");
        }
        return false;
    }
}