apache / dubbo

The java implementation of Apache Dubbo. An RPC and microservice framework.
https://dubbo.apache.org/
Apache License 2.0
40.48k stars 26.43k forks source link

consumer端和provider端指定序列化协议不一致时,provider序列化协议选择的问题 #6638

Closed ncepuwanghui closed 3 years ago

ncepuwanghui commented 4 years ago

Environment

Steps to reproduce this issue

当consumer端使用的序列化协议,和provider指定序列化协议不一致时,provider端判断只要是服务端支持的序列化协议,就会以consumer端指定的为准,忽略provider端指定的序列化协议。

如下图,服务端指定了序列化协议protobuf,consumer在调用时使用hessian2,发现服务端返回的Serialization是Hessian2Serialization,不是GenericProtobufSerialization。 (注: dubbo 2.6.9 没有protobuf,此处只是自行扩展测试,可忽略)

image

Expected Result

是否能增加配置开关,缺省默认只要服务端支持就可以。允许dubbo使用方决定要不要严格要求consumer使用provider指定的序列化协议。

或者,dubbo这样设计有其他缘由,可能我没有领会到,希望大家多多指点。

ncepuwanghui commented 4 years ago

正常情况,consumer从注册中心获取provider指定的序列化协议,provider根据header中额protoId去查ID_SERIALIZATION_MAP获取相应的Serialization,不会出现不一致。

我上面说的这个情形是,假如consumer端使用伪造篡改的、其他协议的数据发起请求

ppzzyy11 commented 4 years ago

我觉得一般dubbo生产时都是内网环境,不太会出现篡改问题吧...

CrazyHZM commented 3 years ago

No feedback for a long time, please close the issue temporarily. If there is still a problem, you can reopen it.