Nginx在Safari中返回400错误

TDe*_*Dev 6 safari ajax nginx axios nuxt.js

我正在尝试发送表格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

Erv*_*ouS 6

这实际上是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]);
Run Code Online (Sandbox Code Playgroud)

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