Answers:
该限制取决于所使用的服务器和客户端(如果适用,还取决于服务器或客户端使用的代理)。
大多数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错误。
您在这里问两个独立的问题:
HTTP GET请求的最大长度是多少?
如前所述,HTTP本身并未对请求长度施加任何硬编码的限制。但浏览器的限制范围为2 KB-8 KB(如果我们算是非常老的浏览器,则为255个字节)。
是否定义了一个响应错误,如果服务器收到超过此长度的GET请求,服务器可以/应该返回该错误?
那是没人回答的那个。
HTTP 1.1定义414 Request-URI Too Long
了达到服务器定义的限制的情况下的状态代码。您可以在RFC 2616上看到更多详细信息。
对于客户端定义的限制,服务器返回任何内容是没有意义的,因为服务器根本不会收到请求。
这里有一个类似的问题:GET请求的长度是否有限制?
我已经达到了共享主机帐户的限制,但是浏览器在到达我认为的服务器之前返回了一个空白页。
如前所述,HTTP本身并没有对请求长度施加任何硬编码限制。但浏览器的限制范围为GET方法中允许的2048个字符。
是。GET请求没有任何限制。
我可以使用Chrome浏览器和curl命令将〜4000个字符作为查询字符串的一部分发送。
我正在使用Tomcat 8.x服务器,该服务器已返回预期的200 OK响应。
这是Google Chrome HTTP请求的屏幕截图(出于安全原因,我隐藏了端点):
响应