Подтвердить что ты не робот

File_get_contents ('php://input'), возвращающий пустую строку с запросом PUT

Переместив один из наших сайтов из Linux с Apache на Windows с помощью IIS (8.5), на котором запущен PHP 5.6 через FastCGI, мы столкнулись с проблемой, что file_get_contents('php://input') возвращает пустую строку для запросов PUT.

Я создал следующий тест:

<?php
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && 
    strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    die(file_get_contents('php://input'));
}
?>
<!DOCTYPE html>
<html>
<head>
    <script src="//code.jquery.com/jquery-2.1.3.min.js"></script>
</head>
<body>
    <h2>POST:</h2>
    <div id="post"></div>

    <h2>PUT:</h2>
    <div id="put"></div>
    <script>
        $.ajax({
            url: '?',
            data: 'Working',
            type: 'POST'
        }).then(function(response) {
            $('#post').html(response || 'Not working');
        });

        $.ajax({
            url: '?',
            data: 'Working',
            type: 'PUT'
        }).then(function(response) {
            $('#put').html(response || 'Not working');
        });
    </script>
</body>
</html>

Результат:

POST:

Работа

PUT

Не работает

Что может быть причиной этого?

4b9b3361

Ответ 1

Как выясняется, проблема вызвана модулем Helicon Ape (модулем для поддержки файлов конфигурации Apache.htaccess и .htpasswd). Удаление этого модуля устраняет проблему, но я до сих пор не знаю, почему это мешает PUT-запросам. Думаю, мне придется опубликовать тему на своем форуме с этой проблемой.