关于Web服务:HTTP GET请求的最大长度?

maximum length of HTTP GET request?

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

更新:如标签中所示,这是在Web服务API的上下文中进行的,尽管看到浏览器的限制也很有趣。


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

大多数Web服务器的限制为8192字节(8KB),通常可以在服务器配置中的某个位置进行配置。关于客户端问题,HTTP1.1规范甚至警告说,这里是第3.2.1章的摘录:

Note: Servers ought to be cautious about depending on URI lengths
above 255 bytes, because some older client or proxy
implementations might not properly support these lengths.

限制是在msie和safari中约2千字节,在opera中约4千字节,在firefox中约8千字节。因此,我们可以假设8kb是最大可能长度,而2kb是服务器端可以依赖的更经济的长度,而255字节是假设整个URL将进入的最安全长度。

如果在浏览器或服务器中超出了限制,大多数人将在不发出任何警告的情况下截断限制之外的字符。但是,某些服务器可能会发送HTTP 414错误。如果您需要发送大数据,那么最好使用post而不是get。它的限制要高得多,但比客户机更依赖于所使用的服务器。通常,平均Web服务器允许高达2GB左右。这也可以在服务器设置中的某个位置配置。当超过POST限制时,平均服务器将显示特定于服务器的错误/异常,通常为HTTP 500错误。


您在这里提出两个单独的问题:

What's the maximum length of an HTTP GET request?

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

Is there a response error defined that the server can/should return if it receives a GET request exceeds this length?

那是没人接的电话。

HTTP 1.1为达到服务器定义的限制的情况定义了状态代码414 Request-URI Too Long。您可以在RFC2616上看到更多的细节。

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

希望这有帮助。


浏览器限制为:

1
2
3
4
5
6
7
8
9
Browser     Address bar   document.location  
                          or anchor tag
------------------------------------------
Chrome          32779           >64k      
Android          8192           >64k                        
Firefox          >64k           >64k      
Safari           >64k           >64k      
IE11             2047           5120  
Edge 16          2047          10240

想要更多吗?请参阅有关堆栈跟踪的此问题


这里有类似的问题:GET请求的长度有限制吗?

我已经达到了限制,我的共享主机帐户,但浏览器返回了一个空白页,在它到达服务器之前,我想。


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


如前所述,HTTP本身不会对请求长度施加任何硬编码限制;但是浏览器对get方法中允许的2048个字符有限制。


GET REQUEST using chrome browser是。GET请求没有限制。

1
I am able to send ~4000 characters as part of the query string using chrome browser & curl command both.

我使用的是Tomcat8.x服务器,它返回了预期的200OK响应。

下面是chromeHTTP请求的屏幕截图(隐藏由于安全原因而尝试的端点):

应答XY1〔1〕。