WebDav-клиент Apple Finder помещает файл без содержимого - PullRequest
2 голосов
/ 19 сентября 2011

Я создаю сервер webdav, чтобы иметь возможность легко добавлять / (пере) перемещать файлы в наше программное обеспечение для офиса. Так что я также реализую команду PUT, и это работает нормально, если я использую Windows Explorer для создания файлов. Однако, когда я использую Mac OS X Finder (с помощью Transmit, но это не имеет значения), чтобы положить файл на сервер, я не получаю контент. Я настроил Fiddler в качестве обратного прокси, и это показывает мне следующий запрос:

PUT http://localhost:15001/WebDav/test.txt HTTP/1.1
User-Agent: TransmitFSHelper/1.0.2 neon/0.29.3
Connection: TE
TE: trailers
Host: localhost:49416
Content-Length: 0

Не отправляет контент. Я прочитал кое-что о «трейлерах», чанкованной кодировке и так далее, но не знаю, что ответить клиенту, чтобы он отправил содержимое файла.

1 Ответ

2 голосов
/ 19 сентября 2011

Когда создается новый файл (fopen ('bla', 'w')), сначала на диске появляется пустой файл.Вот почему вы видите начальный запрос с 0-байтовым файлом.После этого программа может добавить файл, но это будет отдельный запрос.

Поэтому обработайте 0-байтовый файл как правильный и отправьте обратно 201 Created.После этого вы должны увидеть вторичный запрос.

однако это правда, что иногда клиенты (например, Finder) будут использовать кусочную кодировку в HTTP-запросе.Я реализовал сервер webdav в PHP, и он просто не работает при использовании FastCGI и Finder, чтобы сервер работал, сервер должен работать на apache с mod_php.

Так что, если запрос с фрагментами завершится неудачно или успешно, зависит от вашего стекаЯ бы не знал с .NET.Но по крайней мере вы должны видеть 2 запроса, идущих на сервер, а не один.Проблема чанкованного кодирования не связана с этим.

...