Мое приложение написано на 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] пуст