POST传递大体积数据时合法URL返回Error 404问题求助
携带3.5MB的PDF字段请求返回404,本质是请求体大小超出了服务端的POST请求上限,被服务端配置拦截导致(部分服务端不会返回标准的413载荷过大错误,而是直接返回404),可按以下步骤排查解决:
- 调整PHP配置限制
找到服务端的php.ini配置文件,修改如下参数:
; 单次POST请求最大允许值,需大于传输的PDF大小,这里设置10M即可满足需求 post_max_size = 10M ; 单个表单输入字段的最大长度限制,避免单字段超限 max_input_vars = 1000 ; 保证PHP有足够内存处理大请求 memory_limit = 128M
修改完成后重启PHP服务(PHP-FPM或对应的Web服务进程)生效。
- 调整Web服务配置
如果使用Nginx作为Web服务器,在站点配置的server块或全局http块中添加/修改参数:
client_max_body_size 10M;
修改后重启Nginx生效。
如果使用Apache作为Web服务器,在httpd.conf中调整LimitRequestBody参数值为10485760(对应10MB),重启Apache生效。
- 可选优化传输方式
你当前传输的PDF是字符串格式,如果是base64编码的话会比原二进制文件大33%左右,可改用FormData传输二进制数据,降低请求体积的同时避免序列化编码问题,修改后的AJAX代码如下:
let formData = new FormData($("#formdatos")[0]); // 如果PDF是你前端生成的,可先转成Blob对象再插入formData,不用存在隐藏字段里 // formData.append('PDF', pdfBlob, 'filename.pdf'); $.ajax({ url: "../../../lib/pscover.php", type: "POST", data: formData, dataType: "json", cache: false, // 必须添加以下两个参数,避免jQuery错误处理FormData contentType: false, processData: false, success: function(response) { // 原有业务逻辑 } });
- 额外排查项
如果修改完以上配置仍报错,检查服务端是否部署了WAF、mod_security等安全防护模块,调整模块的POST请求体大小限制规则即可。
内容的提问来源于stack exchange,提问作者PabloGesplanet
相关产品推荐
相关产品推荐

