Google Web Toolkit(GWT)RPC调用的数据格式如何以及如何传输IsSerializable对象。我知道Java Serializable传输某种二进制格式,但是这是GWT的情况呢? (因为我不期望它与JavaScript兼容,或者至少需要
最好的问候,斯蒂芬
编辑:Brian Slesinsky只是记录了协议(通过逆向工程代码): https://docs.google.com/document/d/1eG0YocsYYbNAtivkLtcaiEE5IOF5u4LUol8-LL0TIKU/edit首先,GWT-RPC协议是不对称的,因此它总是针对客户端进行优化:快速反序列化来自服务器的东西,并快速序列化发送给它。
它显然不是二进制的,正如你怀疑的,但基于文本。客户端到服务器协议是管道分隔的,而服务器到客户端基于JSON(使用// OK或// EX前缀来告诉请求是成功还是失败)。两者使用可序列化类的常见知识来序列化/反序列化;例如,双方都知道类X有两个字段,一个整数和一个字符串,按顺序序列化,所以它们都写入/读取一个整数,然后一个字符串,不需要在编码格式中指定它的字段关于。
GWT-RPC协议是版本化的(它随着新的GWT版本的发布而定期更改),并且使用类和可序列化字段名称的散列来确保客户端和服务器都使用相同版本的类(这意味着您必须重新编译并在每次更改可序列化类时重新部署客户端代码)。
最好的文档是代码,但您可以在这些幻灯片中找到请求格式的概述:https://www.owasp.org/images/7/77/Attacking_Google_Web_Toolkit.ppt
RequestFactory,与GWT-RPC相反,使用一个对称的基于JSON的协议(基于AutoBean的JSON序列化),其中客户端和服务器可以通信,即使没有从相同的代码编译(好,根据你在版本之间做的更改,当然),因为它们传递类和属性名称。