HTTP GET请求的最大长度

584

HTTP GET请求的最大长度是多少?

如果服务器接收到的GET请求超过该长度,是否定义了响应错误以供返回?

这是在Web服务API的背景下讨论的,尽管查看浏览器限制也很有趣。


11
可能是 什么是URL的最大长度? 的重复问题。 - KillianDS
16
这与URL的最大长度完全没有任何关系。问题是关于发送到URL的请求的最大长度。请注意,不要改变原意,尽可能使翻译通俗易懂。 - user207421
3
@EJP所说的GET请求中的“数据”内容仅限于URI。 - KillianDS
1
@JimAho,你的评论也是第一条评论的重复..... - Jun
7个回答

541

限制取决于所使用的服务器和客户端(如果适用,还包括服务器或客户端使用的代理)。

大多数服务器和客户端的限制为8192字节(8 KB),通常可以在服务器或客户端设置中进行配置。HTTP规范建议第4.1节中使用8000个八位字节:

强烈建议所有发送方和接收方至少支持具有8000个八位字节长度的协议元素的URI。请注意,这意味着某些结构和在线表示(例如,HTTP/1.1中的请求行)在某些情况下必然会更大。

但这并非必需。旧版客户端的限制通常较低。例如,Internet Explorer的限制约为2 KB。甚至HTTP规范的先前版本直接陈述如下:

注意:服务器应谨慎依赖超过255字节的URI长度,因为一些旧的客户端或代理实现可能不会正确支持这些长度。
如果超出限制,无论是在浏览器还是服务器中,大多数情况下都会截断超出限制的字符而不发出任何警告。然而,有些服务器可能会发送HTTP 414 'URI Too Long'错误。
如果需要发送大量数据,最好使用POST而不是GET。其限制要高得多,但更依赖于所用的服务器而不是客户端。通常平均Web服务器允许最多约4 GB的数据。这也可以在服务器设置中进行配置。当超过POST限制时,平均服务器将显示特定于服务器的错误/异常,通常作为HTTP 500错误。

6
你可以根据浏览器限制来回答这个问题。您是否知道,如果使用HttpClient与REST服务器交互,GET和POST之间在问题请求大小方面是否存在差异? - aioobe
4
POST方法使用请求体发送数据。HTTP规范对POST请求的大小没有具体限制。 - Ignacio A. Poletti
20
GET和POST方法有着非常具体的含义,因此使用POST方法来执行GET请求就好比用锤子砸蛋一样不恰当。 - nohros
54
@nohros 那是从理想角度来看的,但GET也有一些POST/PUT没有的限制。比如说,假设你想执行一个包含许多ID的非常长的查询;如果你要选择数百个ID,那么它可能会超出允许的URL大小限制,而将该查询放在POST中可以避免这种情况,即使在概念上并不那么合理。就个人而言,我希望HTTP允许GET请求像PUT和POST一样具有主体。 - devios1
4
有些REST API喜欢在与数据交互时坚持使用标准正确的方法。在收到(GET)某些东西的路由上使用POST可能会引起误导。然而,我确实看到需要使用“body”发送冗长的数据,在GET中,URL只能包含有限的内容,如本答案所解释的那样。 - Zac
显示剩余6条评论

157
您在这里提出了两个不同的问题:

HTTP GET请求的最大长度是多少?

如先前提到的,HTTP本身不会对请求长度施加硬编码限制; 但浏览器会有不同的限制,范围从2 KB - 8 KB(如果考虑到非常旧的浏览器,则为255字节)。

如果服务器收到超过此长度的GET请求,是否定义了应返回的响应错误?

这是没有人回答的问题。

HTTP 1.1针对达到服务器定义的限制的情况,定义了状态码414 Request-URI Too Long。您可以在RFC 2616上查看更多详细信息。

对于客户端定义的限制,服务器返回任何内容都没有意义,因为服务器根本不会接收到这个请求。


41

浏览器的限制包括:

Browser           Address bar    document.location
                                 or anchor tag
---------------------------------------------------
Chrome                32779           >64k
Android                8192           >64k
Firefox                >64k           >64k
Safari                 >64k           >64k
Internet Explorer 11   2047           5120
Edge 16                2047          10240

想获取更多信息?请查看Stack Overflow上的这个问题


5
这里有一个类似的问题:GET请求的长度是否有限制?

我在我的共享主机上遇到了这个限制,但是我认为浏览器在到达服务器之前就返回了一个空白页面。

5

从技术上讲,如果URL长度超过2000个字符,我发现HTTP GET会出现问题。在这种情况下,最好使用HTTP POST或分割URL。


2

如前所述,HTTP本身没有对请求长度强制限制;但是浏览器有范围限制,在GET方法中允许的字符数为2048。


-6

GET REQUEST using the Chrome browser

是的。GET 请求没有限制。

我可以使用 Chrome 浏览器和 curl 命令发送 ~4000 个字符作为查询字符串的一部分。

我正在使用 Tomcat 8.x 服务器,它返回了预期的 200 OK 响应。

这里是 Google Chrome HTTP 请求的截图(由于安全原因隐藏了我尝试的端点):

响应

GET using the Chrome browser


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接