Формат данных GWT RPC - PullRequest
       23

Формат данных GWT RPC

30 голосов
/ 26 мая 2011

Как выглядит формат данных для вызовов RPC Google Web Toolkits (GWT) и как передаются объекты IsSerializable. Я знаю, что Java Serializable передает какой-то двоичный формат, но так ли это и с GWT? (Поскольку я не ожидаю, что он будет совместим с JavaScript или, по крайней мере, потребует дополнительного разбора).

1 Ответ

52 голосов
/ 26 мая 2011

РЕДАКТИРОВАТЬ: Брайан Слесинский только что задокументировал протокол (путем обратного инжиниринга кода): 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 (на основе сериализации JSON в AutoBean), где клиент и сервер могут взаимодействовать, даже если они не скомпилированы из одного и того же кода (ну, в зависимости от изменений, которые вы сделали между версиями конечно), потому что они передают имена классов и свойств.

...