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