HTTP GET请求的最大长度?

Mar*_*son 467 web-services http

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

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

Bal*_*usC 446

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

大多数Web服务器的限制为8192字节(8KB),通常可在服务器配置中的某处进行配置.至于客户端问题,HTTP 1.1规范甚至警告过这一点,这是第3.2.1章的摘录:

注意:服务器应该谨慎依赖于长度超过255个字节的URI,因为某些较旧的客户端或代理实现可能无法正确支持这些长度.

限制在MSIE和Safari大约2KB,Opera大约4KB和Firefox大约8KB.因此,我们可以假设8KB是最大可能长度,并且2KB是服务器端依赖的更可承受的长度,并且255字节是假设整个URL将进入的最安全长度.

如果在浏览器或服务器中超出限制,大多数将仅截断限制之外的字符而不发出任何警告.但是,某些服务器可能会发送HTTP 414错误.如果您需要发送大数据,那么最好使用POST而不是GET.它的限制高得多,但更多地依赖于使用的服务器而不是客户端.通常,平均网络服务器允许高达2GB左右.这也可以在服务器设置中的某处进行配置.当超过POST限制时,平均服务器将显示特定于服务器的错误/异常,通常为HTTP 500错误.

  • @nohros这是理想的真实,但GET也有POST/PUT没有的限制.例如,假设您要执行涉及一堆ID的非常长的查询; 如果您选择了数百个ID,这可能会超出允许的URL大小限制,而将该查询放入POST可以避免这种情况,即使它在概念上没有那么多意义.就个人而言,我希望HTTP允许GET请求拥有像PUT和POST一样的主体. (17认同)
  • Get和Post方法具有非常特定的含义,因此使用POST执行GET与使用锤子打破鸡蛋相同. (11认同)
  • 您可以根据浏览器限制来回答问题.如果使用HttpClient与REST服务器进行交互,您知道GET和POST之间是否存在任何差异(就有问题的请求大小而言)? (5认同)
  • 当然,POST使用正文发送数据.HTTP规范没有对帖子强加特定的大小限制. (2认同)
  • Http 规范完全允许将主体放入 GET 和 DELETE 请求中。我已经在 J​​ava 中测试过它,它可以工作。不幸的是,这里的一些代理可能会切断整个身体。 (2认同)
  • 为什么不建议将 PUT 作为替代解决方案?它是幂等的,就像 GET 一样,所以这实际上不比使用 POST 更合适吗? (2认同)
  • 一些 REST API 喜欢在与数据交互时坚持标准的正确方法。在您收到( GET )某些东西的路线上使用 POST 可能会产生误导。但是,我确实看到需要使用 `body` 来发送冗长的数据,在 GET 中,URL 只能容纳本答案中解释的那么多。 (2认同)

Edu*_*ual 140

你在这里问两个不同的问题:

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

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

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

那是没有人回答的.

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

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

希望这可以帮助.


小智 20

浏览器限制是:

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
Run Code Online (Sandbox Code Playgroud)

想要更多?在Stack Overfollow上看到这个问题


jay*_*jay 5

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

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


MSI*_*lam 5

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