Назад | Перейти на главную страницу

webDAV и CORS

Я наблюдаю странное поведение на своем веб-сервере. Попытка заставить keeWeb принять файл из общей папки webDAV на другом сервере. Если я хочу добавить файл WebDAV, который вводится в форме:

https://FQDN:8443/webdav/file.kdbx

Я вижу следующие заголовки (заголовки инструментов разработчика FF -> заголовки ответов):

Access-Control-Allow-Origin:"*"
Access-Control-Allow-Methods:"GET, HEAD, POST, PUT, OPTIONS, MOVE, DELETE, COPY, LOCK, UNLOCK"
Access-Control-Allow-Headers:"origin, content-type, cache-control, accept, authorization, if-match, destination, overwrite"
Access-Control-Allow-Credentials:"true"

НО, на вкладке «Сеть» я вижу 401: Метод запроса: Параметры Код состояния: 401 Неавторизованный.

Кажется, что заголовки CORS добавляются, но перезапись не работает. Моя конфигурация Apache:

<Directory /var/www/html/webdav>

Header always set Access-Control-Allow-Origin *
Header always set Access-Control-Allow-Headers "origin, content-type, cache-control, accept, authorization, if-match, destination, overwrite"
Header always set Access-Control-Expose-Headers "ETag"
Header always set Access-Control-Allow-Methods "GET, HEAD, POST, PUT, OPTIONS, MOVE, DELETE, COPY, LOCK, UNLOCK"
Header always set Access-Control-Allow-Credentials "true"

RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]

        DAV On
        AuthType Basic
        AuthName "Authentication Required"
        AuthUserFile /etc/httpd/.htpasswd
        Require valid-user
</Directory>

Я что-то пропустил или может быть, Rewrite не работает на Apache / 2.4.6 (CentOS). Я действительно понятия не имею, как отлаживать перезапись. Есть ли способ отследить такие вещи?

У меня точно такая же проблема, и я несколько месяцев пытался ее решить, просто сдался. Версия сервера: Apache / 2.4.10 (Raspbian) Я пробовал это в дополнение к заголовкам CORS от Keeweb (https://github.com/keeweb/keeweb/wiki/WebDAV-Config)

    Alias /KeePass /var/www/KeePass                                                                                                                                                                               


    <Directory /var/www/KeePass>                                                                                                                                                                              
        DAV On                                                                                                                                                                                                
        AuthType Digest                                                                                                                                                                                       
        AuthName "KeePass"                                                                                                                                                                                    
        AuthUserFile /var/www/passwd.dav                                                                                                                                                                      
        <LimitExcept OPTIONS>                                                                                                                                                                                 
        Require valid-user                                                                                                                                                                                    
        </LimitExcept>                                                                                                                                                                                        
   </Directory>

Метод OPTIONS должен не подлежат авторизации, поэтому поместите его за пределы каталога, требующего аутентификации, например:

RewriteEngine on
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ blank.html [R=200,L,E=HTTP_ORIGIN:%{HTTP:ORIGIN}]

<Directory "/path/to/your/directory">
  AuthType "Basic"
  AuthName "Password Manager"
  AuthBasicProvider file
  AuthUserFile "/your/htpasswd.file"
  Require user someuser

  DAV On
  Options Indexes
  Header always set Access-Control-Allow-Origin "*"
  Header always set Access-Control-Allow-Headers "origin, content-type, cache-control, accept, authorization, if-match, destination, overwrite"
  Header always set Access-Control-Expose-Headers "ETag"
  Header always set Access-Control-Allow-Methods "GET, HEAD, POST, PUT, OPTIONS, MOVE, DELETE, COPY, LOCK, UNLOCK"
  Header always set Access-Control-Allow-Credentials "true"
</Directory>