axios的get请求413,Request Entity Too Large,怎么解决?

不管是本地联调还是线上环境都有这种问题,看到网上的方法,线上环境有在nginx里设置client_max_body_size 100m;但是依然出现了这个问题,请求体很长:

pageNum=1&pageSize=10&accountCode=&accountNumber=&accountType=&bankName=%E4%B8%AD%E5%9B%BD%E5%B7%A5%E5%95%86%E9%93%B6%E8%A1%8C,%E4%B8%AD%E5%9B%BD%E5%BB%BA%E8%AE%BE%E9%93%B6%E8%A1%8C,%E4%B8%AD%E5%9B%BD%E9%93%B6%E8%A1%8C,%E4%B8%AD%E5%9B%BD%E5%86%9C%E4%B8%9A%E9%93%B6%E8%A1%8C,%E4%BA%A4%E9%80%9A%E9%93%B6%E8%A1%8C,%E4%B8%8A%E6%B5%B7%E6%B5%A6%E4%B8%9C%E5%8F%91%E5%B1%95%E9%93%B6%E8%A1%8C,%E6%8B%9B%E5%95%86%E9%93%B6%E8%A1%8C,%E4%B8%AD%E4%BF%A1%E9%93%B6%E8%A1%8C,%E5%85%B4%E4%B8%9A%E9%93%B6%E8%A1%8C,%E4%B8%AD%E5%9B%BD%E8%BF%9B%E5%87%BA%E5%8F%A3%E9%93%B6%E8%A1%8C,%E5%9B%BD%E5%AE%B6%E5%BC%80%E5%8F%91%E9%93%B6%E8%A1%8C,%E6%B1%9F%E8%A5%BF%E9%93%B6%E8%A1%8C,%E5%8D%8E%E5%A4%8F%E9%93%B6%E8%A1%8C,%E4%B8%8A%E9%A5%B6%E9%93%B6%E8%A1%8C,%E4%B8%AD%E5%9B%BD%E9%82%AE%E6%94%BF%E5%82%A8%E8%93%84%E9%93%B6%E8%A1%8C,%E6%B5%99%E5%95%86%E9%93%B6%E8%A1%8C,%E5%B9%BF%E5%8F%91%E9%93%B6%E8%A1%8C,%E5%8C%97%E4%BA%AC%E9%93%B6%E8%A1%8C,%E5%B9%B3%E5%AE%89%E9%93%B6%E8%A1%8C,%E5%A4%A7%E6%96%B0%E9%93%B6%E8%A1%8C,%E6%B1%9F%E9%93%9C%E9%9B%86%E5%9B%A2%E8%B4%A2%E5%8A%A1%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8,%E6%97%A5%E6%9C%AC%E4%B8%89%E4%BA%95%E4%BD%8F%E5%8F%8B%E9%93%B6%E8%A1%8C%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8,%E4%B8%AD%E5%9B%BD%E6%B0%91%E7%94%9F%E9%93%B6%E8%A1%8C,%E6%B8%A3%E6%89%93%E9%93%B6%E8%A1%8C,%E6%B8%A4%E6%B5%B7%E9%93%B6%E8%A1%8C%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8,%E6%B3%95%E5%9B%BD%E5%B7%B4%E9%BB%8E%E9%93%B6%E8%A1%8C%EF%BC%88%E4%B8%AD%E5%9B%BD%EF%BC%89%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8,%E5%86%9C%E6%9D%91%E5%95%86%E4%B8%9A%E9%93%B6%E8%A1%8C,%E4%B8%8A%E6%B5%B7%E9%93%B6%E8%A1%8C,%E5%AE%81%E6%B3%A2%E9%93%B6%E8%A1%8C,%E6%B1%9F%E8%8B%8F%E9%93%B6%E8%A1%8C,%E4%B9%9D%E6%B1%9F%E9%93%B6%E8%A1%8C,%E6%B1%87%E4%B8%B0%E9%93%B6%E8%A1%8C,%E6%98%9F%E5%B1%95%E9%93%B6%E8%A1%8C%EF%BC%88%E4%B8%AD%E5%9B%BD%EF%BC%89%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8,%E6%B0%B8%E9%9A%86%E9%93%B6%E8%A1%8C,%E6%B3%95%E5%9B%BD%E5%85%B4%E4%B8%9A%E9%93%B6%E8%A1%8C%EF%BC%88%E4%B8%AD%E5%9B%BD)+%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8,%E8%8D%B7%E5%85%B0%E5%AE%89%E6%99%BA%E9%93%B6%E8%A1%8C%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8,%E6%81%92%E7%94%9F%E9%93%B6%E8%A1%8C(+%E4%B8%AD%E5%9B%BD)+%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8,%E5%AE%81%E6%B3%A2%E9%80%9A%E5%95%86%E9%93%B6%E8%A1%8C,%E5%8D%97%E6%B4%8B%E5%95%86%E4%B8%9A%E9%93%B6%E8%A1%8C,%E4%B8%9C%E4%BA%9A%E9%93%B6%E8%A1%8C,%E6%B3%95%E5%9B%BD%E4%B8%9C%E6%96%B9%E6%B1%87%E7%90%86%E9%93%B6%E8%A1%8C%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8,%E7%91%9E%E7%A9%97%E5%AE%9E%E4%B8%9A%E9%93%B6%E8%A1%8C%EF%BC%88%E4%B8%AD%E5%9B%BD%EF%BC%89%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8,%E5%A4%A7%E5%8D%8E%E9%93%B6%E8%A1%8C%EF%BC%88%E4%B8%AD%E5%9B%BD%EF%BC%89%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8,%E5%8E%A6%E9%97%A8%E5%9B%BD%E9%99%85%E9%93%B6%E8%A1%8C,%E6%96%B0%E9%9F%A9%E9%93%B6%E8%A1%8C(+%E4%B8%AD%E5%9B%BD)+%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8,%E5%B9%BF%E4%B8%9C%E5%8D%8E%E5%85%B4%E9%93%B6%E8%A1%8C,%E6%97%A5%E7%85%A7%E9%93%B6%E8%A1%8C,%E9%9D%92%E5%B2%9B%E9%93%B6展开

请问:
1.如果不改成POST,有什么办法可以解决这个问题呢?
2.GET请求的长度到底是多少,怎么看上限?我的是chrome浏览器
3.怎么看请求的大小,多少KB这样?

阅读 3.2k
2 个回答

除了 client_max_body_size,还有一个设置叫作 large_client_header_buffers,是用来控制请求头部上限的。

bankName 必须要传银行的名称吗?没有类似 id 或者枚举之类的映射吗?前者肯定会比后者占用更多的空间。

GET 请求实际上没有明确的规范规定上限必须是多少,因服务器配置而异,放到现在这个时间点,和浏览器关系不大了已经。

GET 请求的大小可以尝试用 devtool 把请求通过 curl 的形式 copy 出来,然后加上 -w '%{size_request} %{size_upload}' 参数就能看到。

或者就自己手动算也行,GET 方法因为没有 body,请求大小就等于 URL + 头部的大小,将这两部分加起来的字符数乘以 byte 再进行换算就行了,不过这里面有个要注意的是,计算前先把非 ASCII 字符转换一下,不然是不对的。

看起来像是query信息太多了导致的 HEAD 超长然后 413 FULL HEAD 了?我划到最后居然还有 “展开” 两个字。
其实改用 post 请求就好了。
另外你改的是客户端请求体的大小,并不是请求头的大小哇。改为设置 client_header_buffer_size 试试看?


GET请求的长度限制不需要管,只需要考虑URL不要太长就好了, Chrome 好像是 8,000 字节左右

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏