为了讨论,假设以下Web应用程序:用户可以输入一系列(可能有数百个)X,Y坐标。服务器将它们绘制在图表中,并作为图像返回。
这显然是一个幂等操作的示例,因此根据HTTP规范,建议将其实现为GET操作。但是,您无法使用所有参数构建URL,因为它会太长。<form method="get">能处理那么多参数吗?
我还听说<form method="get">与将参数放置在URL中完全相同?那对于某些浏览器或整个HTTP协议来说是否正确?请求的最大长度是多少?
使用method=get的表单将把所有输入放入URL中。
浏览器对URL有最大长度限制。这个限制因浏览器而异,甚至版本与版本之间也会有所不同。
如果可以的话,我建议您在表单中使用POST方法。
希望对您有所帮助。
GET和url?name=value&...是同一件事情,因为浏览器在发送请求之前仅将GET表单转换为URL。
URL的最大长度由浏览器和服务器级别确定,因此对于给定的浏览器/服务器,它是两者中较小的那个。
这篇文章列出了当前URLS的最大长度清单。
不,服务器无法区分将参数放在URL中和使用GET方法的表单之间的区别。因此,如果给定的带有参数的URL太长,使用GET方法的表单也无济于事。
POST或GET应该主要根据它们的语义来选择。GET用于“安全”操作。也就是说,用户不应该对通过GET请求执行的操作负责。POST方法用于需要用户负责的操作。
例如,当搜索功能使用POST时,这非常令人沮丧。用户不希望简单的查询改变任何重要的系统状态-他们期望搜索是一个“安全”的操作。
另一方面,许多漏洞存在,因为不安全的操作可以通过GET请求和POST请求进行访问。这导致了像XSRF这样的漏洞,攻击者只需将恶意的“src” URL放入合法网站上的IMG标签中。
对于您的用例,Ajax可能是一个合适的解决方案。您可以为每个选定的点发出GET请求,并将它们存储在服务器的会话中。当用户完成输入点后,最后一个GET请求检索到最终产品。
这并不是关于get和post的问题的答案,但在像你描述的情况下,通常更容易将更复杂的数据存储在服务器上,并将其与会话ID或用户帐户相关联,而不是每次都将其放入URL中。然后,您可以仅使用该会话的标识符在cookie或作为url参数中检索图像。
这也可以帮助您缓存所请求的图像,以便您不必每次用户想要再次查看特定图表时都重新生成它们。