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

Posted

技术标签:

【中文标题】GET 请求可以加书签,而 POST 不能。有人可以解释一下吗?【英文标题】:GET request can be bookmarked and POST can not . Can anybody explain on this? 【发布时间】:2011-01-11 16:53:33 【问题描述】:

我正在研究 HTTP 方法。我读到 GET 请求可以加书签,而 POST 请求不能加书签。 谁能举个例子解释一下?

谢谢

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

小问题:由于“书签”对浏览器有很强的暗示作用,并且浏览器不存储带有书签的相关 HTTP 方法,所以 POST 不能真正被书签。 POST 的 URL 可以作为重复的 POST 存储和执行,但在我看来,这与“书签”不同。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

这并不是不能将其中一个或另一个加入书签。更重要的是,单击书签会总是触发GET 请求!单击普通链接、书签、浏览器导航按钮、输入浏览器地址栏等都会触发GET 请求。他们从不触发POST 请求。 POST 请求通常仅在您提交使用method="post" 设置的 html <form> 时触发。您可以完美地编写软件来为POST 请求添加书签,但由于敏感原因没有这样做。

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

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

【讨论】:

写得真好。幂等性是否还包括第二个请求将被忽略,直到第一个请求的响应被传递(在 GET 的情况下)。【参考方案5】:

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

GET 参数作为 URL 的一部分发送,而 POST 参数在 HTTP 请求正文中发送。 POST 就像 GET 一样,带有第二组用户不可见的隐藏参数。这就是您能够对包含 GET 参数的 URL 发出 POST 请求的原因。 详情见How are parameters sent in an HTTP POST request?

虽然通常书签包含 URL,但它们也可能包含 javascript 代码(如此命名的小书签),并且有一些技巧可以制作可以发出 POST 请求而不是 GET 请求的书签。 详情见How to save a bookmark in Firefox with POST data?

【讨论】:

以上是关于GET 请求可以加书签,而 POST 不能。有人可以解释一下吗?的主要内容,如果未能解决你的问题,请参考以下文章

http 请求 get 和post 区别

get与post的区别

jmeter请求之get与post的区别?

GET POST 区分

表单的提交有两种方式:GET和POST,这两种方式的区别是啥?

get和post区别