In most if not all previous web/http-based device protocols, there is not a way to easily and efficiently transfer large amounts of binary data within the overall protocol. It is possible, for example, to send binary data within an XML data stream, but doing this requires the binary data to be encoded, typically in a Base64Binary representation. Encoding in a Base64Binary representation has two main drawbacks which make its use in this regard inefficient. First, Base64Binary is an ASCII representation of binary data and, as such, the data doubles in size when encoded. Second, the computation time needed to encode and then later decode the Base64Binary makes data transfer in this manner is very inefficient.
One past attempt to transfer binary data performs some transfer setup that involves passing attributes of the data defined in XML within the context of the device protocol, and then sending the binary data in a separate HTTP connection that is outside the definition of the device protocol. This approach, however, gives rise to synchronization problems insofar as synchronizing certain aspects of the data with its attributes. In addition, this approach also creates a number of security and connection-related issues that can impact protocol design and device implementation of the protocols. Needless to say, this approach is not the best choice when one wishes to pass binary data in an efficient and safe manner.
Accordingly, this invention arose out of concerns associated with providing improved methods and systems for transferring binary data.