Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru
Статья с вики SabreDAV от 11 июля 2013 »»» Читать полностью

Особенности реализации WebDAV в Microsoft Windows. Часть 2

Свойства

Windows XP требует, чтобы в ответах на запрос PROPFIND dav-свойство getlastmodified приходило в специальном формате. Вот его пример:

<d:getlastmodified xmlns:b="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/" b:dt="dateTime.rfc1123">Sat, 26 Apr 2008 18:00:18 -0400</d:getlastmodified>

Эта проблема, похоже, решена начиная с Windows XP SP3. Поскольку такой ответ несовместим с MS Office, он больше не поддерживается SabreDAV начиная с версий 1.7.4 и 1.8.2.

Когда Windows XP делает запросы, она требует следующие свойства WebDAV:

  • name
  • parentname
  • href
  • ishidden
  • iscollection
  • isreadonly
  • getcontenttype
  • contentclass
  • getcontentlanguage
  • creationdate
  • lastaccessed
  • getlastmodified
  • getcontentlength
  • resourcetype
  • isstructureddocument
  • defaultdocument
  • displayname
  • isroot

Windows (XP и Vista) вводят следующие свойства в пространстве имен XML "urn:schemas-microsoft-com:":

  • Win32CreationTime (пример: Sat, 26 Apr 2008 20:38:50 GMT)
  • Win32LastAccessTime (тот же формат)
  • Win32FileAttributes (пример: 00002020) означающее классические свойства MS-DOS, такие как 'только для чтения, скрытый, архивный, системный', и пару более новых. Где искать подробную документацию по ним, неизвестно.

Кодировки

Windows XP шлет HTTP-запросы в кодировке ISO-8859-1. Возможно, еще в CP-1252, но это надо проверять.

Конвертер для этих случаев был включен в SabreDAV начиная с 1.2.0alpha1.

Однако, на текущий момент он работает только для конвертирования HTTP-запросов, приходящих от Windows, и не трогает ответы, посылаемые для Windows. Как ни странно, Windows, видимо, принимает строки в UTF-8. Если имя файла в кодировке UTF-8 не может быть правильно переведено в ISO-8859-1, то такой файл может быть открыт, но не может быть пересохранен. Путей решения этой проблемы пока не видно.

Эта проблема была подтверждена для Windows XP SP3, но пока не проверялась для Windows Vista или Windows 7.

Еще один баг

Обычно Windows разблокирует файл с помощью следующего заголовка в запросе UNLOCK:

Lock-Token: <opaquelocktoken:98b0726b-b34f-4778-9c35-da3927b6fe36>

Но по каким-то причинам он, иногда, передается неправильно:

Lock-Token: opaquelocktoken:98b0726b-b34f-4778-9c35-da3927b6fe36

Начиная с SabreDAV 1.4.3 такое поведение распознается и правильно обрабатывается.

Ограничения на размер файла

Из соображений безопасности в Windows встроено ограничение на размер файла в 50000000 байт.

Вы можете получить одно из следующих сообщений об ошибке, когда скачиваете файл из хранилища WebDAV:

  • «Cannot Copy FileName: Cannot read from the source file or disk» (Windows Vista или XP SP1 с установленным обновлением безопасности 896426);
  • «Error 0x800700DF: The file size exceeds the limit allowed and cannot be saved.» (Windows 7)

Это ограничение может быть отключено только на клиентской стороне с помощью изменения ключей реестра. Подробную инструкцию вы можете прочитать в этой статье.

Поддержка {DAV:}displayname

В ранних клиентах (XP, а также, как минимум, Vista) было обнаружено, что если посылать им displayname, то они могут начать использовать displayname для доступа к ресурсам вместо URL.

Это является причиной всех основных багов. Поэтому, лучше вообще избегать {DAV:}displayname. Для Windows 7 было объявлено, что этот баг «исправлен» путем полного отказа от поддержки {DAV:}displayname.

Аутентификация

HTTP-дайджест поддерживается сейчас повсеместно. Базовая HTTP-аутентификация может использоваться непосредственно в IE, но по умолчанию не будет работать, если вы используете веб-клиент для доступа к WebDAV без SSL.

Базовую аутентификацию можно включить внеся следующие изменения в реестр:

  • создайте новый ключ реестра HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\UseBasicAuth
  • и установите его значение в '1' (без кавычек).

Имеются сообщения о том, что в некоторых случаях нужно также установить HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel в значение 2:

Для упрощения изменения реестра сохраните следующий код в файл .reg, а потом откройте его:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters]
"UseBasicAuth"=dword:00000001
"BasicAuthLevel"=dword:00000002

В некоторых случаях Windows может некорректно предварять имя пользователя NT-доменом с двумя слэшами. Пример:

MYDOMAIN\\username

Чтобы это исправить, пользователь должен пройтись по всем запросам логина удаляя NT-домен. В конечном итоге это должно помочь. Можно также автоматически определять и исправлять такие случаи, но это может оказаться проблематичным при HTTP дайджест-аутентификации.

Дополнительные замечания

Windows не поддерживает иные порты, кроме стандартного (80). Будьте уверены, что ваш сервер не будет работать по HTTP на нестандартном порту.

Узнать больше

На сайте greenbytes.de есть хороший список ресурсов с подробной информацией о некоторых багах.

Перевод с английского: Дмитрий Скоробогатов, специально для xBB.uz, 14.02.2014
Оригинальный текст может быть найден по адресу http://code.google.com/p/sabredav/wiki/Windows


Предыдущие публикации:

Биржа долевых инвестиций SIMEX.

Последнее редактирование: 2014-02-15 12:45:45

Метки материала: webdav, microsoft, особенности реализации webdav, windows, реализация webdav, веб, microsoft windows, web, клиенты webdav, internet

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.