在URL参数和<form method="get">中的参数之间有什么区别吗?

6
现在,我知道URL参数和POST参数的区别:如果URL太长,一些浏览器可能会表现不良,因此即使您的应用程序可以响应GET请求,也不建议在URL中填充数百个参数。
为了讨论,假设以下Web应用程序:用户可以输入一系列(可能有数百个)X,Y坐标。服务器将它们绘制在图表中,并作为图像返回。
这显然是一个幂等操作的示例,因此根据HTTP规范,建议将其实现为GET操作。但是,您无法使用所有参数构建URL,因为它会太长。<form method="get">能处理那么多参数吗?
我还听说<form method="get">与将参数放置在URL中完全相同?那对于某些浏览器或整个HTTP协议来说是否正确?请求的最大长度是多少?
8个回答

7

HTTP规范没有设置限制,但浏览器和服务器有限制。具体详情请参见此处

如果表单的方法设置为GET,浏览器将创建一个较长的URL,因此上述限制适用。


3

HTTP规范并不要求将GET请求的参数放置在URI中。像使用POST一样,向GET请求发送消息主体是合法的。

然而,浏览器以非常好的理由实现了GET表单:缓存。 预期在服务器上处理GET请求时不会产生副作用。因此,GET请求的响应可能会被缓存。如果您开始在GET请求上使用消息主体,则立即失去了这种性能提升选项。

如果您计划设计图表API,则可以查看Google。他们已经向公众提供了一个非常好的API。即使只是为了学习如何将尽可能多的信息打包到URI参数中,也值得一看。

alt text alt text alt text alt text


2
您的浏览器实际上是从表单输入构建一个非常长的URL。因此,在URL和表单Method =“GET”之间没有区别。任何一种方式都会导致加载相同的URL。

1

使用method=get的表单将把所有输入放入URL中。

浏览器对URL有最大长度限制。这个限制因浏览器而异,甚至版本与版本之间也会有所不同。

如果可以的话,我建议您在表单中使用POST方法。

希望对您有所帮助。


1

GET和url?name=value&...是同一件事情,因为浏览器在发送请求之前仅将GET表单转换为URL。

URL的最大长度由浏览器和服务器级别确定,因此对于给定的浏览器/服务器,它是两者中较小的那个。

这篇文章列出了当前URLS的最大长度清单。


1

不,服务器无法区分将参数放在URL中和使用GET方法的表单之间的区别。因此,如果给定的带有参数的URL太长,使用GET方法的表单也无济于事。

POST或GET应该主要根据它们的语义来选择。GET用于“安全”操作。也就是说,用户不应该对通过GET请求执行的操作负责。POST方法用于需要用户负责的操作。

例如,当搜索功能使用POST时,这非常令人沮丧。用户不希望简单的查询改变任何重要的系统状态-他们期望搜索是一个“安全”的操作。

另一方面,许多漏洞存在,因为不安全的操作可以通过GET请求和POST请求进行访问。这导致了像XSRF这样的漏洞,攻击者只需将恶意的“src” URL放入合法网站上的IMG标签中。

对于您的用例,Ajax可能是一个合适的解决方案。您可以为每个选定的点发出GET请求,并将它们存储在服务器的会话中。当用户完成输入点后,最后一个GET请求检索到最终产品。


0
我也听说过<form method="get">与将参数放在URL中完全等效,这是真的吗?
是的,这里是相应的RFC部分
请求的最大长度是多少? 规范说:“HTTP协议没有对URI的长度施加任何先验限制。”
然而,Internet Explorer 6有2083个字符的限制。其他浏览器允许更多的字符,但如果你选择这条路,你基本上必须为ie6设计。

HTTP规范并未定义<form>元素;您需要查看HTML规范。 - Julian Reschke

0

这并不是关于get和post的问题的答案,但在像你描述的情况下,通常更容易将更复杂的数据存储在服务器上,并将其与会话ID或用户帐户相关联,而不是每次都将其放入URL中。然后,您可以仅使用该会话的标识符在cookie或作为url参数中检索图像。

这也可以帮助您缓存所请求的图像,以便您不必每次用户想要再次查看特定图表时都重新生成它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接