基本了解使用 GET、POST 等 HTTP 方法

Posted

技术标签:

【中文标题】基本了解使用 GET、POST 等 HTTP 方法【英文标题】:Base understanding of using HTTP methods like GET, POST etc 【发布时间】:2018-01-17 00:30:55 【问题描述】:

我正在考虑了解 HTTP 动词 GET、POST 等的基本用法... 我读了这些文章,但对我来说还不是很清楚:

In a RESTful application, how do we differentiate between an "action" and an HTTP verb (GET, POST, PUT, DELETE)?

Why use HTTP verbs?

Use of HTTP RESTful methods GET/POST/etc. Are they superfluous?

我只是没有看到为方法调用添加限定符(据我所知,GET、POST 等...是限定符)的建议。为什么不直接通过 URL 调用方法(如 server.domain/methods/addnewproduct),由服务器端决定做什么?我了解何时使用 GET、POST、UPDATE 等...(CRUD 程序 bla-bla-bla) 我只是不明白为什么要实现这些动词来限定远程方法调用。 看了很多遍,都是因为这些是安全的方法,但是为什么这些方法是安全的呢?

【问题讨论】:

【参考方案1】:

为什么不直接通过 URL 调用方法(如 server.domain/methods/addnewproduct),由服务器端决定做什么?

URL 标识一个事物。 HTTP METHOD 描述了您希望如何与之交互。

http://example.com/HowToTellForAChild 可以代表你。

有人可能想获取有关您的信息,或者他们可能想在服务器上放置有关您的新信息。

它们仍然与同一个实体进行交互,但方式不同。

http://example.com/HowToTellForAChild/GET 会将身份识别和交互类型混为一谈。充其量只是令人困惑。


看了那么多遍,都是因为这些是安全的方法,但是为什么这些方法是安全的呢?

见the specification:

这些方法应该被认为是“安全的”。 这允许用户代理表示其他方法,例如 POST、PUT 和删除,以一种特殊的方式,让用户知道 正在请求可能不安全的操作。

举个实际例子:

假设您要通过 Internet 订购娃娃屋。你提交一个表格。它触发一个 POST 请求。

如果您随后按下刷新按钮,浏览器会识别出您只是发出 POST 请求,并询问您是否确定要再次发出请求。

这可以防止您意外订购第二个娃娃屋。

(虽然见the PRG pattern)。

【讨论】:

收集您的答案! :)

以上是关于基本了解使用 GET、POST 等 HTTP 方法的主要内容,如果未能解决你的问题,请参考以下文章

HTTP中的Get与Post

http 中的 Get 与 Post

使用 HTTP RESTful 方法 GET/POST/等。它们是多余的吗?

HTTP两种请求方法:GET和POST基础了解

浅谈HTTP中Get与Post的区别

浅谈HTTP中Get与Post的区别