Как я могу использовать файл размера HTTP PUT 0, используя XMLHttpRequest в javascript?

Мы разрабатываем библиотеку javascript для доступа к серверу webdav. И найти трудности в разработке функции загрузки. Мы думаем, что должны использовать HTTP PUT для загрузки, и разработали наши коды загрузки с использованием HTTP PUT. Можно было загружать файлы с помощью http на сервер webdav.

Но когда мы пытаемся загрузить пустой контент с помощью HTTP PUT, сервер отвечает 411 (требуется длина). Мы устанавливаем заголовок длины содержимого, но сервер все еще отвечает 411. Мы не знаем, почему.

  1. Правильно ли разрабатывать функциональность загрузки webdav с помощью HTTP PUT?
  2. Если это так, как мы можем создать файл нулевого размера с помощью webdav?

Ниже приведены наши тестовые коды.

<!DOCTYPE html>
<html>
<head>
    <title>Upload Testing</title>
    <script type="text/javascript">

        function ready() {
            alert('ready');
            doPUT('http://hqz.witkitty.com/soliton.co.jp/modc/emptyfile.txt', '', function () {
                alert('success');
            }, function (e) {
                alert('error ' + e.status);
            });
        }

        function doPUT(path, data, callback, errback) {
            alert("going to upload");
            var request = createXMLHttpRequest();
            request.onreadystatechange = function () {
                if (request.readyState == 4) {
                    if (request.status == 201 || request.status == 204) {
                        if (callback) callback(request);
                    } else {
                        if (errback) errback(request);
                    }
                }
            }
            request.open('PUT', path, true);
            request.setRequestHeader('Content-type', 'application/pdf');
            request.setRequestHeader('Content-length', 0);

            request.send(data);
        }

        function createXMLHttpRequest() {
            return window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
        }
    </script>
</head>
<body>
<input type="button" onclick="ready()" value='Test Uploading'/>
</body>
</html>

person FranXho    schedule 18.02.2014    source источник


Ответы (1)


Это похоже на ошибку либо в пользовательском агенте, либо на сервере.

а) Это происходит со всеми пользовательскими агентами?

б) Можете ли вы захватить трассировку HTTP и проверить, присутствует ли поле заголовка Content-Length?

person Julian Reschke    schedule 18.02.2014
comment
Спасибо. Это происходит только в нашем пользовательском агенте, и это может быть ошибка нашего пользовательского агента. По вашему совету, мы попробовали с другим пользовательским агентом, все в порядке. - person FranXho; 19.02.2014