Заливал я бинарные файлы методом PUT по HTTP протоколу и столкнулся с такой проблемой – если первый байт данных – 0, то файл получается нулевой длинны, а если первый байт какой либо другой (точно не уверен, может быть и на каких то еще кодах так происходит... не проверял точно), то тогда все нормально. Причем в самих данных (только не первом байте) может быть сколько угодно нулей – это никак не влияет на файл – он получается такого же размера, что и должен был быть.
Использовал я ITC. И под XMLHTTP то же самое.