使用POST发送AJAX请求仍遭遇414 URI过长错误,求助解决
解决POST请求出现414「Submitted URI too large」错误的方案
嘿,这个问题我太熟了!你遇到的414错误,本质是虽然用了POST请求,但你把所有参数都塞到URL的查询字符串里了,这完全没发挥POST的核心优势——通过请求体(Body)传递大量数据,反而触发了服务器对URI长度的限制(比如Apache默认URI长度限制在8192字节左右)。
下面给你几个靠谱的解决办法,按优先级排序:
1. 把参数从URL移到POST请求体里(最推荐)
这是根治问题的办法,毕竟POST设计出来就是用来传递大量数据的。这里给你举个原生AJAX的示例,根据后端接受数据的类型调整即可:
情况1:后端接受表单格式数据(application/x-www-form-urlencoded)
const xhr = new XMLHttpRequest(); // 注意:URL不要带任何查询参数了 xhr.open('POST', 'http://localhost/Repositories/som/administrador/noticias-editar.php', true); // 设置请求头,告诉服务器数据格式 xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // 把所有参数整理成键值对,放到请求体里 const formData = new URLSearchParams({ countryBanner: 1, datepicker: '1969-12-31 04:00 PM', highlight: 1, typeBanner: 'Small', category: 'Tips', editor: 'FAMO:SWISS', og_img: 57, title_US_EN: 'How to choose the right chair?', // 其他剩余参数... }); xhr.onload = function() { // 这里处理服务器响应 if (xhr.status >= 200 && xhr.status < 300) { console.log('请求成功:', xhr.responseText); } else { console.error('请求失败:', xhr.statusText); } }; // 发送请求体数据 xhr.send(formData);
情况2:后端接受JSON格式数据(application/json)
如果后端支持JSON,可以这么写:
const xhr = new XMLHttpRequest(); xhr.open('POST', 'http://localhost/Repositories/som/administrador/noticias-editar.php', true); xhr.setRequestHeader('Content-Type', 'application/json'); // 把参数转成JSON字符串 const jsonData = JSON.stringify({ countryBanner: 1, datepicker: '1969-12-31 04:00 PM', highlight: 1, typeBanner: 'Small', category: 'Tips', editor: 'FAMO:SWISS', og_img: 57, title_US_EN: 'How to choose the right chair?', // 其他剩余参数... }); xhr.onload = function() { // 处理响应逻辑同上 }; xhr.send(jsonData);
2. 临时方案:调整服务器的URI长度限制(不推荐优先使用)
如果你因为某些原因必须在URL里传参,可以修改服务器的配置来放宽URI长度限制,但这只是治标不治本,而且可能遇到客户端或代理的URI长度限制:
Apache服务器:在
httpd.conf或.htaccess文件中添加/修改以下配置:LimitRequestLine 16384 # 调大URI总长度限制,单位字节 LimitRequestFieldSize 8192 # 调大单个请求头字段的长度限制修改后记得重启Apache服务。
Nginx服务器:在
nginx.conf的http或server块中添加/修改:client_header_buffer_size 16k; large_client_header_buffers 4 16k;修改后重启Nginx服务。
3. 检查并精简参数
看看你传递的参数里有没有不必要的内容,或者特别长的文本字段(比如文章内容),这类字段绝对不应该放在URL里,必须放到POST请求体中。
内容的提问来源于stack exchange,提问作者Daniel Paiva
相关产品推荐
相关产品推荐

