<!-- review: finished -->

<a id="external-dav-ext"></a>

# DAV-Ext

Этот модуль расширяет поддержку WebDAV методами PROPFIND, OPTIONS, LOCK, UNLOCK.

Стандартный модуль [DAV](https://angie.software//angie/docs/configuration/modules/http/http_dav.md#http-dav) обеспечивает частичную реализацию
WebDAV и поддерживает только методы GET, HEAD, PUT, DELETE, MKCOL, COPY, MOVE.
Для полной поддержки WebDAV необходимо включить стандартный модуль
`http_dav_module`, а также этот модуль для отсутствующих методов.

<a id="installation-7"></a>

## Установка

Для [установки](https://angie.software//angie/docs/installation/index.md#install-packages) модуля используйте один из
следующих пакетов:

- Angie: `angie-module-dav-ext`;
- Angie PRO: `angie-pro-module-dav-ext`.

<a id="loading-the-module-6"></a>

## Загрузка модуля

Подключение модуля в контексте `main{}`:

```nginx
load_module modules/ngx_http_dav_ext_module.so;
```

<a id="configuration-example-83"></a>

## Пример конфигурации

```nginx
dav_ext_lock_zone zone=lock_zone:10m;
server {
    listen 80 default_server;

    location / {
        root /usr/share/angie/html;

        dav_methods PUT DELETE MKCOL COPY MOVE;
        dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;
        dav_ext_lock zone=lock_zone;
    }
}
```

<a id="request-execution-examples"></a>

## Примеры выполнения запросов

Загрузка файла на сервер:

```console
$ curl -i -X PUT -d @testf1.txt http://127.0.0.1/testf1.txt
HTTP/1.1 201 Created
Server: Angie/|angie_version|
Date: |sampledatelong| 19:15:35 GMT
Content-Length: 0
Location: http://127.0.0.1/testf1.txt
Connection: keep-alive
```

Перезапись этого же файла:

```console
$ curl -i -X PUT -d @testf1.txt http://127.0.0.1/testf1.txt
HTTP/1.1 204 No Content
Server: Angie/|angie_version|
Date: |sampledatelong| 19:15:35 GMT
Connection: keep-alive
```

Блокирование файла от перезаписи:

```console
$ curl -i -X LOCK http://127.0.0.1/testf1.txt
HTTP/1.1 200 OK
Server: Angie/|angie_version|
Date: |sampledatelong| 19:15:35 GMT
Content-Type: text/xml; charset=utf-8
Content-Length: 392
Connection: keep-alive
Lock-Token: <urn:7502d56f>
```

Попытка перезаписи файла:

```console
$ curl -i -X PUT -d @testf1.txt http://127.0.0.1/testf1.txt
HTTP/1.1 423
Server: Angie/|angie_version|
Date: |sampledatelong| 19:15:35 GMT
Content-Length: 0
Connection: keep-alive
```

Файл заблокирован. Разблокировка файла:

```console
$ curl -i -X UNLOCK -H 'Lock-Token: <urn:7502d56f>' http://127.0.0.1/testf1.txt
HTTP/1.1 204 No Content
Server: Angie/|angie_version|
Date: |sampledatelong| 19:15:35 GMT
Connection: keep-alive
```

Перезапись файла:

```console
$ curl -i -X PUT -d @testf1.txt http://127.0.0.1/testf1.txt
HTTP/1.1 204 No Content
Server: Angie/|angie_version|
Date: |sampledatelong| 19:15:35 GMT
Connection: keep-alive
```

Файл успешно разблокирован и перезаписан.

<a id="additional-information-7"></a>

## Дополнительная информация

Подробная документация и исходный код доступны по ссылке:
[https://github.com/arut/nginx-dav-ext-module](https://github.com/arut/nginx-dav-ext-module)
