HTTP GET请求的最大长度


487

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

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

这是在Web服务API的上下文中,尽管有趣的是也看到了浏览器的限制。



7
@KillianDS它与URL的最大长度绝对无关。问题是关于发送 URL 的请求的最大长度。
罗恩侯爵

2
@EJP GET的“数据”内容不过是一个URI。
KillianDS 2015年

@JimAho您的评论也是第一条评论的重复.....
Jun711 '18

Answers:


463

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

大多数Web服务器的限制为8192字节(8 KB),通常可以在服务器配置中的某个位置进行配置。至于客户端,HTTP 1.1规范甚至对此发出警告。这是第3.2.1章的摘录:

注意:服务器应谨慎使用255个字节以上的URI长度,因为某些较旧的客户端或代理实现可能无法正确支持这些长度。

Internet Explorer和Safari中的限制约为2 KB,Opera中的限制约为4 KB,而Firefox中的限制约为8 KB。因此,我们可以假设8 KB是最大可能的长度,而2 KB是在服务器端依赖的更合理的长度,并且255个字节是假定整个URL都将进入的最安全的长度。

如果在浏览器或服务器中都超过了限制,则大多数字符会截断超出限制的字符,而不会发出任何警告。但是,某些服务器可能会发送HTTP 414错误。如果您需要发送大数据,则最好使用POST而不是GET。它的限制高得多,但是比客户端更依赖于所使用的服务器。通常,一般的Web服务器最多允许2 GB左右的空间。也可以在服务器设置中的某个位置进行配置。当超过POST限制时,普通服务器将显示特定于服务器的错误/异常,通常是HTTP 500错误。


6
您可以根据浏览器限制来回答问题。您是否知道,例如,使用HttpClient与REST服务器进行交互时,GET和POST之间是否存在任何区别(就请求大小而言)?
aioobe

3
当然,POST使用正文来发送数据。HTTP规范没有为帖子强加特定的大小限制。
Ignacio A. Poletti

1
Http规范完全允许将正文放在GET和DELETE请求中。我已经在Java中对其进行了测试,并且可以正常工作。不幸的是,这里有些代理人可能会削减整个机构。
Nicolas Zozol 2014年

12
Get and Post方法具有非常特殊的含义,因此使用POST执行GET与使用锤子打碎鸡蛋的方法相同。
nohros

18
@nohros从理论上讲是正确的,但是GET还具有POST / PUT所没有的限制。例如,假设您要执行一个涉及一堆id的非常长的查询;如果您选择数百个ID,则可能会超出允许的URL大小的限制,而将查询放入POST可以避免这种情况,即使从概念上讲并没有太大意义。我个人希望HTTP允许GET请求具有与PUT和POST一样的主体。
devios1 2015年

143

您在这里问两个独立的问题:

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

如前所述,HTTP本身并未对请求长度施加任何硬编码的限制。但浏览器的限制范围为2 KB-8 KB(如果我们算是非常老的浏览器,则为255个字节)。

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

那是没人回答的那个。

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

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


23

浏览器限制为:

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

想要更多?请参阅堆栈溢出问题



3

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



-6

使用Chrome浏览器获取请求

是。GET请求没有任何限制。

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

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

这是Google Chrome HTTP请求的屏幕截图(出于安全原因,我隐藏了端点):

响应

使用Chrome浏览器进行GET

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.