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

时间:2010-02-01 12:25:05

标签: http

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

由于

5 个答案:

答案 0 :(得分:27)

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

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

答案 1 :(得分:10)

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

答案 2 :(得分:6)

不是这个或那个不能被加书签。点击书签将更多始终触发GET请求!单击普通的vanilla链接,书签,浏览器导航按钮,输入浏览器地址栏等等都会触发GET请求。他们永远不会发出POST请求。当您提交使用POST设置的HTML <form>时,{em}通常只会触发method="post"请求。您可以完美地编写软件来为POST请求添加书签,但由于敏感原因,不会这样做。

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

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

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:0)

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

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

虽然通常书签包含URL,但它们也可能包含JavaScript代码(因此命名为bookmarklet),并且有一些黑客可以制作可以发出POST请求而不是GET的书签。
有关详细信息,请参阅How to save a bookmark in Firefox with POST data?