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
private static final String DUBBO_ATTACHMENT_HEADER = "Dubbo-Attachments";
    
    private static final int MAX_HEADER_SIZE = 8 * 1024;
    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        HttpServletRequest request = ResteasyProviderFactory.getContextData(HttpServletRequest.class);
        RpcContext.getContext().setRequest(request);
        
        if (request != null && RpcContext.getContext().getRemoteAddress() == null) {
            RpcContext.getContext().setRemoteAddress(request.getRemoteAddr(), request.getRemotePort());
        }
        RpcContext.getContext().setResponse(ResteasyProviderFactory.getContextData(HttpServletResponse.class));
        String headers = requestContext.getHeaderString(DUBBO_ATTACHMENT_HEADER);
        if (headers != null) {
            for (String header : headers.split(",")) {
                int index = header.indexOf("=");
                if (index > 0) {
                    String key = header.substring(0, index);
                    String value = header.substring(index + 1);
                    if (!StringUtils.isEmpty(key)) {
                        RpcContext.getContext().setAttachment(key.trim(), value.trim());
                    }
                }
            }
        }
    }
    @Override
    public void filter(ClientRequestContext requestContext) throws IOException {
        int size = 0;
        for (Map.Entry<String, String> entry : RpcContext.getContext().getAttachments().entrySet()) {