Is there a limit to the length of a GET request?
GET请求的长度是否有限制?
-
这个问题是在SO的类似问题的基础上结束的,但另一个问题在2年后被问到。 因此,这不能重复。
-
这个问题被标记为在这个问题之后提出的问题的重复是多么有趣......在这个问题之后,即使是这个有更正确答案的问题也会被问到
不在RFC中,不,但有实际限制。
HTTP协议不对其长度设置任何先验限制
一个URI。服务器必须能够处理它们的任何资源的URI
服务,并且应该能够处理无限长度的URI
提供可以生成此类URI的基于GET的表单。一台服务器
如果URI更长,应该返回414(Request-URI Too Long)状态
比服务器可以处理的(参见第10.4.15节)。
注意:服务器应该谨慎依赖URI长度
超过255个字节,因为一些较旧的客户端或代理实现
可能无法正确支持这些长度。
-
HTTPbis为此增加了一点:"在实践中发现了对请求目标长度的各种临时限制。建议所有HTTP发件人和收件人都支持8000或更多八位字节的请求目标长度。" tools.ietf.org/html/…
这篇文章总结得很好
简介:它依赖于实现,因为RFC中没有指定的限制。使用多达2000个字符(IE的限制)是安全的。如果你在接近这个长度的任何地方,你应该确保你真的需要那么长的URI,也许一个替代设计可以解决这个问题。
即使用于发送数据,URI也应该是可读的。
-
良好的写作,但URI可读性与GET与POST无关。目的是为Web定义RESTful API,以区分请求类型的功能差异。 HTTP GET请求可能倾向于用户可读的超链接,但这不是他们的目的,只是一次使用。 w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3
-
URI的目的不是为Web定义RESTful API。完全没有。 w3.org/Provider/Style/URI.html
-
正确。 GET&的目的然而,POST是。问题是询问HTTP GET请求。您假设他意味着在网站上找到的超链接,旨在提供人类可读性。这是GET HTTP的一个特殊用法,但远非唯一的用途。
-
不,这不是GET&的目的。 POST。 REST体系结构是在HTTP的GET和POST方法发明很久之后发明的。此外,即使在做REST应用程序时,我也强烈支持尽可能使用可读的URI。请参阅redrata.com/restful-uri-design
-
对不起,你只是在这里被误导了。 REST很容易描述HTTP协议,所以虽然这个术语本身可能会发布GET& POST,它仅用于描述它们的用途和用途。我必须在这里呼吁权威,因为你并没有和我争论,你正在与编写HTTP规范并发明"REST"的Roy Fielding争论。同样,您链接的文章涉及人类可读的URI,它代表了HTTP使用的一小部分:"短(尽可能)。这使得它们易于记录或拼写或记忆。"
-
"HTTP / 1.1是一种特定的体系结构,在我成功应用基于REST的设计的范围内,允许人们在传统实现所施加的限制内以最有效的方式部署RESTful基于网络的应用程序" - Roy Fielding(技术.groups.yahoo.com / group / rest-discuss / message / 6757)& (ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm)
-
顺便说一下,我不是在反对短URI。没关系。但是因为你的URI太长而使用POST在技术上是滥用POST。
-
我不和罗伊菲尔丁争论,我正在与你对菲尔丁所说的解释。事实上,你正在向后解释报价,他说HTTP / 1.1允许人们以最好的方式做REST,而不是HTTP / 1.1的目的是做REST。我真的不知道他说的方法存在的原因(这是,他们的目的)是适合RESTful架构。他说,如果您的应用程序与REST有意义的场景相匹配,您应该使用它来获得最佳行为。 [ics.uci.edu/~fielding/pubs/dissertation/evaluation.htm#sec_6_1]
-
顺便说一下,我还要说,如果你使用REST并且GET请求中使用的URI很长,你可能做错了。如果您确定自己在做什么,请使用长URI,但仍尝试使它们可读。这将使未来开发人员的生活更轻松。我想,最后,我想说的是"如果你的URI很长,请仔细检查它们,并尝试让它们可读"。这根本不反对REST。虽然我同意如果你使用REST,改变POST的GET总是错误的。但如果你不是,那不一定是错的。
-
试图使所有URI可读是愚蠢的。
正如用户Erickson所要求,我发表我的评论作为答案:
我已经在IE8,IE9,FF14,Opera11,Chrome20和Tomcat 6.0.32(全新安装),服务器端的Jersey 1.13上做了一些测试。我使用了jQuery函数$ .getJson和JSONP。结果:所有浏览器允许最多5400个字符。 FF和IE9最多可以达到6200个字符。以上所有内容均返回"400 Bad request"。我没有进一步调查是什么导致400.我找到的最大值我很好,因为在我的情况下我需要大约2000个字符。
规范不限制HTTP Get请求的长度,但不同的浏览器实现它们自己的限制。例如,Internet Explorer具有以2083个字符实现的限制。
-
感谢您准确的值=> +1。但IE的具体版本是什么?我的IE8在地址栏(URL输入框)上不接受超过2048个字符。但我的JavaScript代码可以使用3586个字符发送XMLHttpRequest GET(我没有测试更多)。因此,你在哪里找到2083?干杯。
-
我已经在IE8,IE9,FF14,Opera11,Chrome20和Tomcat 6.0.32(全新安装),服务器端的Jersey 1.13上做了一些测试。我使用了jQuery函数$ .getJson和JSONP。结果:所有浏览器允许最多5400个字符。 FF和IE9最多可以达到6200个字符。以上所有内容均返回"400 Bad request"。我没有进一步调查是什么导致400.我找到的最大值我很好,因为在我的情况下我需要大约2000个字符。
-
这篇MS KB文章指出IE8(及更早版本)GET和POST URL的URL限制是2083个字符:support.microsoft.com/kb/208427
-
@OneWorld你的评论应该是一个答案,所以人们会看到它,我可以投票。谢谢你的测试。
W3C毫不含糊地否认这是一个神话
http://www.w3.org/2001/tag/doc/get7#myths
-
它是关于特定限制为256个字符的神话,并且在IE中存在可证明的限制。
-
该链接被w3.org/2001/tag/doc/whenToUseGet-20030922#ephemeral取代(说同样的事情)
-
@ JonasKö lker l e€33#SDay s
带有contentLength参数的setFixedLengthStreamingMode(int)可以设置HTTP请求主体的固定长度。
-
这似乎是唯一真正相关的答案。其他都是关于URL长度,这不会出现在问题中。