You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中GET请求URI超5000字符提交大文本报错如何解决?

问题原因

  • 414状态码含义为URI Too Long,你当前使用GET请求传递文本内容,所有参数都拼接在URL中,而浏览器、Web服务器(Nginx/Apache等)普遍对URL长度有2KB~8KB的限制,5000字符的文本已经超出长度上限,会被服务器直接拦截返回414错误
  • 后续的JSON解析报错是因为服务器返回的是错误提示页面的HTML内容,并非你预期的JSON格式,所以response.json()解析失败

解决方案

核心修改是把GET请求改为POST请求,大文本内容放在请求体中传递,不要拼接在URL里。

1. 前端Blade JS代码修改

function sendRequest()
{
    var items = document.getElementById("item").value;
    // 移除URL参数拼接,参数全部放在请求体中
    var url = {{url}};

    // 构造FormData存放请求参数
    const requestBody = new FormData();
    requestBody.append('items', items);
    requestBody.append('id', '{{$id}}');

    fetch(url, {
        method: 'POST',
        headers: {
            // Laravel POST请求必须携带CSRF令牌,否则会报419状态码错误
            'X-CSRF-TOKEN': '{{ csrf_token() }}'
        },
        body: requestBody
    }).then(response => response.json())
      .then(responseObject => {
          // 原有业务逻辑保持不变
      }).catch(err => {
          // 建议添加错误捕获逻辑,方便后续排查问题
          console.error('请求异常:', err);
      })
}

2. 路由规则修改

找到你原路由定义,把请求类型从GET改为POST:

// 原路由类似:Route::get('/receive', [YourController::class, 'receivebyGet']);
// 修改为POST类型
Route::post('/receive', [YourController::class, 'receivebyGet']);

3. 后端Controller逻辑

原有逻辑不需要修改,Laravel的Request实例会自动读取POST请求体中的参数,$request->items可以正常获取到提交的文本内容:

public function receivebyGet(Request $request)
{
    $lineArray  = array();
    $slipData = explode("\n", $request->items); 
    // 原有业务逻辑保持不变
}

超大文本额外配置(大于10M时需要)

如果后续需要传递更大体积的文本,需要修改服务端配置避免被拦截:

  • 修改php.ini配置,调整post_max_size和upload_max_filesize参数到你需要的大小,比如设置为20M
  • 如果你使用Nginx作为Web服务器,需要在站点配置中添加client_max_body_size 20M;规则

内容的提问来源于stack exchange,提问作者user14232549

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:06:05