GWT RPC数据格式
收藏

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

最佳答案

编辑:Brian Slesinsky刚刚记录了该协议(通过对代码进行反向工程):https://docs.google.com/document/d/1eG0YocsYYbNAtivkLtcaiEE5IOF5u4LUol8-LL0TIKU/edit

首先,GWT-RPC协议是非对称的,因此它总是针对客户端进行了优化:快速反序列化来自服务器的某些内容,以及快速序列化要发送给它的某些内容。

It's obviously not binary, as you suspected, but text-based. client-to-server protocol is pipe-delimited while server-to-client is based on JSON (with a //OK or //EX prefix to tell whether the request succeeded or failed). Both use the common knowledge of the serializable classes to serialize/deserialize; for instance, both sides know that class X has two fields, an integer and a String, serialized in that order, so they both write/read an integer, and then a String, with no need to specify in the encoded format which field it's about.

GWT-RPC协议已版本化(随着新GWT版本的发布会定期更改),并使用类的哈希值和可序列化字段的名称来确保客户端和服务器都使用相同版本的类(这意味着您必须重新编译)并在每次更改可序列化的类时重新部署客户端代码)。

最好的文档是代码,但是您可以在以下幻灯片中找到请求格式的概述:https://www.owasp.org/images/7/77/Attacking_Google_Web_Toolkit.ppt

与GWT-RPC相反,RequestFactory使用基于JSON的对称协议(基于AutoBean的JSON序列化),即使没有使用相同的代码进行编译,客户端和服务器也可以通信(当然,这取决于您在两个版本之间所做的更改) ),因为它们会传递类名和属性名。

    公众号
    关注公众号订阅更多技术干货!