2011-05-26 80 views
27

如何查看Google Web Toolkits(GWT)RPC调用的数据格式以及如何传输IsSerializable对象。我知道Java Serializable传输某种二进制格式,但GWT也是如此吗? (因为我不指望它与JavaScript兼容,或者至少需要一些额外的解析)。GWT RPC数据格式

回答

48

编辑:布赖恩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序列化),即使没有从相同的代码编译(当然,取决于你在版本之间做出的改变),客户端和服务器也可以进行通信,因为它们传递了类名和属性名。

+1

伟大的答案,顺便说一句,你知道任何没有Java实现GWT_RPCs? – Stefan 2011-05-26 12:26:47

+0

Google向我介绍有关http://code.google.com/p/gwtphp/和http://code.google.com/p/python-gwt-rpc/的内容,但它们看起来已被放弃(并且RequestFactory是要走的路,但我不知道任何非Java实现) – 2011-05-26 19:03:16

+0

再次感谢。根据这一点,当我想谈谈没有Java服务器RPC是不是要走的路,我应该一些自定义的JSON或XML协议。 – Stefan 2011-05-27 06:51:41