为什么GET中字符的总量有限?
我想问一下关于Head First Servlets和JSP第二版书中引用的以下引用的问题:
GET中的字符总数实际上是有限的(取决于服务器)。 如果用户在“搜索”输入框中键入一段很长的段落,则GET可能不起作用。
当我在任何输入框中输入长文本时,GET不起作用。 我有多少解决方案可以解决这个问题。
GET请求的长度没有特定的限制。 不同的服务器可以有不同的限制 如果您需要将更多数据发送到服务器,请使用POST而不是GET。 建议的服务器和浏览器支持的最小值为8,000字节,但这不是必需的。
RFC 7230的第3.1.1节“请求线”说
如第2.5节所述,HTTP不会对请求行的长度发出预定义的限制。 接收比它实现的任何方法都长的方法的服务器应该使用501(未实现)状态代码进行响应。 接收比它希望解析的任何URI更长的请求目标的服务器必须响应一个414(URI太长)状态码(参见RFC7231的6.5.12节)。
在实践中发现了对请求线长度的各种临时限制。 建议所有HTTP发送方和接收方至少支持8000个八位字节的请求行长度。
第2.5节“一致性和错误处理”说
对于许多协议元素,HTTP没有特定的长度限制,因为根据实现的部署环境和目的,可能适当的长度会有很大差异。 因此,发送者和接收者之间的互操作性取决于对每个协议元素的合理长度的共同期望。 此外,对于某些协议元素而言,通常理解为合理的长度在过去20年的HTTP使用过程中发生了变化,并且预计将来会继续发生变化。
和RFC 7231的6.5.12节“414 URI太长”说
414(URI太长)状态码指示服务器拒绝为请求提供服务,因为请求目标([RFC7230]的第5.3节)比服务器愿意解释的长。 这种罕见的情况很可能发生在客户端将POST请求不正确地转换为具有长查询信息的GET请求时,当客户端陷入重定向的“黑洞”时(例如,指向一个重定向的URI前缀后缀本身),或者当服务器受到试图利用潜在安全漏洞的客户端的攻击时。
'get'数据是以查询字符串发送的 - 也有最大长度。
你可以用查询字符串做所有事情,例如书签。 你真的想要一个真正的大文本书签吗?
有可能配置moste服务器使用更大的长度 - 有些客户端会接受它们,有些会抛出错误。
“注意:服务器应该谨慎处理高于255字节的URI长度,因为一些较旧的客户端或代理实现可能不能正确支持这些长度。” HTTP 1.1规范章节3.2.1 :.
还有一个状态代码“414 Request-URI Too Long” - 如果你得到这个,你会知道你已经投入了很多字符。 (如果达到服务器限制,如果客户端限制较低,则服务器限制每个浏览器都会以自己的方式进行响应)。
一般来说,为每个发送给服务器的数据设置一个限制是明智的 - 就像某些人试图使大量工作量或减慢服务器速度一样(例如,发送大文件 - 使用1个服务器连接,减慢传输速度,使额外的发送 - 在某些时候,服务器会打开很多连接,使用多个客户端,并且在服务器上有攻击场景)。
链接地址: http://www.djcxy.com/p/42173.html