Nginx returns Safari 中的 400 错误

Nginx returns 400 error in Safari

我正在尝试使用 Content-type: multipart/form-data 发送表单。在 Chrome、FF、Edge 中一切正常,但在 Safari 中却不行。它从 nginx

得到 400

用过Laravel + Nuxtjs + Axios

在 nginx conf 中启用 error_log 调试后,我看到

[info] 11687#11687: *1 client prematurely closed stream: only 767 out of 907 bytes of request body received

这实际上是 Safari 上的一个错误。自 WebKit build r230963 起,此问题已修复,但 Safari 尚未更新。如果您想保持兼容的行为,您需要从 axios 请求中发送的表单数据中删除空的文件字段。

类似于:

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

此解决方案 jQuery 依赖,但您可以将此逻辑调整为任何库。