1

私のアプリケーションは Perl 5.14.2 で書かれています。マルチパート/フォームデータを処理します

use CGI;
$query = new CGI;

数週間以来、このプロセスは特定の Apple デバイスの Apache レベルでタイムアウトを呼び出します。

(70007) 指定されたタイムアウトが期限切れになりました: 要求エンティティ データの読み取りエラー

timeout-error を呼び出すすべての Apple デバイスにApplewebkit/605は共通点があります。これは主に、Mac 上の Safari ブラウザー バージョン 11 です。

フォームデータは次の方法で送信されます。

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

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

フォームデータに空のタイプ「ファイル」の要素が含まれている場合に問題が発生することがわかりました(ファイルが提供されていません)。この問題は、CGI または CGI::Simple の使用に依存しません。STDIN バッファを取得しようとしても、エラーが発生します。

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

回避策は、フォームデータを割り当てる前に <form> の空のファイル要素を削除して、フォームデータを削除することです。

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

このバグは 2018 年 4 月 11 日から知られているようです
https://bugs.webkit.org/show_bug.cgi?id=184490

そして、ここ Stackoverflow Safari 11.1 ですでに報告されているようです
: ajax/XHR form submit fails when input[type=file] is empty

4

0 に答える 0