Обработка данных multipart / form в Perl вызывает ошибку Apache с Apple-устройствами, когда элемент form-file-element пуст - PullRequest
0 голосов
/ 26 апреля 2018

Мое приложение написано на Perl 5.14.2. Я обрабатываю multipart / form-data с

use CGI;
$query = new CGI;

Уже через несколько недель этот процесс вызывает тайм-аут на уровне Apache на определенных устройствах Apple:

(70007) Истекло указанное время ожидания: ошибка чтения данных объекта запроса

Все устройства Apple, которые вызывают ошибку тайм-аута, имеют Applewebkit/605 общее. В основном это браузер Safari версии 11 на Mac.

Формданные отправляются через:

var fData = new FormData($('#myForm')[0]);

jQuery.ajax({
    url: '/urladdress',
    data: fData,
    cache: false,
    dataType: 'html',
    contentType: false,
    processData: false,
    type: 'POST'
});

Я обнаружил, что проблема возникает, когда данные формы содержат пустые элементы типа 'file' (файл не предоставлен). Проблема не зависит от использования CGI или CGI :: Simple. Даже просто попытка получить STDIN-буфер инициирует ошибку.

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

Обходной путь - удаление пустых файловых элементов и, следовательно, формданных перед назначением формданных:

$('#myForm').find("input[type='file']").each(function(){
    if ($(this).get(0).files.length === 0) {$(this).remove();}
});
var fData = new FormData($('#myForm')[0]);
...

Ошибка известна с 11 апреля 2018
https://bugs.webkit.org/show_bug.cgi?id=184490

И, похоже, об этом уже сообщалось здесь, в Stackoverflow
Safari 11.1: отправка формы ajax / XHR завершается неудачно, когда ввод [type = file] пуст

...