关于http:GET请求可以加入书签而POST不能。 有人可以解释一下吗?

GET request can be bookmarked and POST can not . Can anybody explain on this?

我正在研究HTTP方法。 我读到可以将GET请求加入书签并且不能将POST请求加入书签。
有人可以用一个例子来解释这个吗?

谢谢


可以为HTTP POST添加书签,但由于书签仅包含URL,因此所有表单参数都将丢失。这通常意味着Web服务器不知道如何处理请求,因为它需要一些表单参数。

如果您通过GET请求提交表单,则所有表单参数都会进入URL(在?之后),因此书签将包含Web服务器第二次重建页面所需的所有信息(cookie除外)或许,但网络服务器更有可能优雅地处理它)


POST无法加入书签。尝试为POST添加书签只会导致对URL进行GET操作。
这有一个非常好的理由,GET请求应该是幂等的 - 也就是说,多次发出相同的GET请求应该会产生相同的响应。另一方面,POST请求不是。
允许将POST加入书签可能会导致您支付两次费用,再次将资金转出您的银行帐户等。


并不是那个或那个不能被加书签。点击书签总是会触发GET请求!单击普通的vanilla链接,书签,浏览器导航按钮,进入浏览器地址栏等等都会触发GET请求。他们永远不会发出POST请求。通常只有在您提交使用method="post"设置的HTML

时才会触发POST请求。您可以完美地编写软件来为POST请求添加书签,但由于敏感原因,它不会这样做。

然而,这里的特殊之处在于GET请求是幂等的。换句话说,每次调用它时都保证给出相同的结果。这很简单,因为请求URL中只提供了所有请求参数。您可以使用它在显示之前预处理数据。在Java Servlet世界中,通常使用doGet()方法,根据请求参数预加载一些内容,将请求转发到JSP文件进行显示。

然而,POST请求不是幂等的。换句话说,当您调用它时,不保证每次都给出相同的结果。所有请求参数都包含在请求正文中。它对最终用户不可见,也在请求URL中不可见。换句话说,你不能将它加入书签。您可以在表单提交后使用ro postprocess数据。在Java Servlet世界中,通常使用doPost()方法来收集请求参数并将其存储在某个数据库中并在末尾转发或将请求重定向到JSP文件以进行结果/确认/显示。


GET请求中,请求的所有信息都在URL中编码。在POST请求中,请求是指定的URL,但是与请求相关的所有信息,例如,表单内容,在请求正文中传递。

为URL添加书签时,您只是为URL添加书签,而不是请求正文。例如。如果您在网页上填写表格然后作为POST请求传递给网络服务器,然后您在浏览器中为响应页面添加书签,浏览器将仅记录URL,而不是表单正文。

此外,当您在浏览器中为页面添加书签时,书签仅包含URL,但不包括请求方法。浏览器始终使用GET表示所有书签。


事实上,不是请求是书签,而是URI。

GET参数作为URL的一部分发送,而POST参数在HTTP请求体中发送。 POST就像GET一样,第二个隐藏的参数集对用户不可见。这就是您能够在包含GET参数的URL上发出POST请求的原因。
有关详细信息,请参阅如何在HTTP POST请求中发送参数?

虽然通常书签包含URL,但它们也可能包含JavaScript代码(因此命名为bookmarklet),并且有一些黑客可以制作可以发出POST请求而不是GET的书签。
有关详细信息,请参阅如何使用POST数据在Firefox中保存书签?