Заливал я бинарные файлы методом PUT по HTTP протоколу и столкнулся с такой проблемой – если первый байт данных – 0, то файл получается нулевой длинны, а если первый байт какой либо другой (точно не уверен, может быть и на каких то еще кодах так происходит... не проверял точно), то тогда все нормально. Причем в самих данных (только не первом байте) может быть сколько угодно нулей – это никак не влияет на файл – он получается такого же размера, что и должен был быть.
Использовал я ITC. И под XMLHTTP то же самое.
ПОМОГИТЕ!!!
С уважением, Александр Семенов.
Re: HTTP протокол. метод PUT. первый байт в данных - 0
JJO>> [ ... ]
JJO>>А ты указываешь Content-Length HTTP-headers? AM>Нет, но указывать пробовал — не помогало.
попробуй еще указать TransferEncoding binary ...
ну а если совсем ни в какую (и если продукт позволяет) — делай Base64-encode и передавай текст — это уж точно отработает
Чем безопаснеe — тем неудобнее ;-)
Re: HTTP протокол. метод PUT. первый байт в данных - 0
Здравствуйте, AsM2, Вы писали:
AM>Причем в самих данных (только не первом байте) может быть сколько угодно нулей – это никак не влияет на файл – он получается такого же размера, что и должен был быть.
А ты перевод строки какой используешь при отправке заголовков?
если однобайтовый юниксовый (\n), то все понятно. По стандарту в хттп
используется двухбайтовый перевод строки в http-заголовках, такой как в Windows.
возможно первый байт твоего запроса ожидается как недостающий байт двухбайтового перевода строки,
а приходит ноль(явный конец строковых данных). Вот сервер его и интерпретирует неправильно...
--
DSD
Re[2]: HTTP протокол. метод PUT. первый байт в данных - 0
Здравствуйте, AsM2, Вы писали:
AM>Так я вообще не трогаю заголовков... AM>использовал AM>ITC (.Execute URL, "PUT", data) AM>XMLHTT (.send data)
AM>так что, к сожалению, не то...
ну может твоя софтина(функции, которые ты вызываешь) внутри что-то не так делает...
в любом случае это место (стык http-заголовка и body) всегда было глючным камнем преткновения...
И вообще совет — используй кодирование данный(base64, uuencode, quoted и т.п.), потому
как HTTP — все же текстовый протокол, и его поведение при работе с бинарными данными
конкретно не определено.