2010-02-01 1700 views

回答

22

的HTTP POST 可以被收藏,但由于书签仅包括URL,所有的形式参数都将丢失。这通常意味着Web服务器不知道该如何处理请求,因为它期望一些表单参数。

如果您通过GET请求提交表单,所有表单参数将进入URL(在?之后),因此书签将包含Web服务器第二次重建页面所需的所有信息(可能除了cookies之外,web服务器更有可能正常处理)

+4

小问题:由于“书签”有一个浏览器的强有力的影响,而浏览器不相关的HTTP方法存储与书签,那么POST无法真正书签。 POST的URL可以作为重复的POST进行存储和执行,但在我看来,这与“书签”不同。 – Palpatim 2013-12-31 00:35:41

8

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

2

GET请求中,请求的所有信息都在URL中编码。在POST请求中,请求是对指定的URL进行的,但是与该请求有关的所有信息表单内容在请求主体中传递。

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

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

5

这并不是说这个或那个不能被添加书签。点击书签的次数会更多总是消防GET请求!点击一个普通的香草链接,书签,浏览器导航按钮,输入浏览器地址栏,等等都会触发一个GET请求。他们从不发射POST请求。 A POST要求是正常只有当您发射提交 a HTML <form>它设置为method="post"。您可以完美地编写软件来为POST请求添加书签,但由于敏感原因不能这样做。

然而,这里的特殊情况是GET请求是idempotent。换句话说,它是保证给予相同的结果每当你调用它。这很简单,因为请求URL中的所有请求参数都可用。您可以使用它来显示之前的数据预处理。在Java Servlet世界中,您通常会使用doGet()方法,该方法会根据请求参数预先加载一些内容,并将请求转发给JSP文件以供显示。

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

+0

写得很好。在第一个请求的响应被传递之前,幂等还包括第二个请求将被忽略(在GET的情况下)。 – 2014-12-19 17:55:45

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?

相关问题