5

我正在开发一项 REST 服务,该服务允许用户根据发票上显示的几条信息(发票号和帐单邮编)声明他们的列表。

我已经阅读了无数关于何时使用 GET 和何时使用 POST 的文章和 Stack Overflow 问题。总的来说,普遍的共识是 GET 应该用于幂等操作,而 POST 应该用于在服务器端创建某些东西的操作。但是,这篇文章:

http://blog.teamtreehouse.com/the-definitive-guide-to-get-vs-post

让我对在这种特定情况下使用 GET 产生疑问,仅仅是因为我使用这两条信息作为验证用户身份的机制。我没有使用这个特定的方法调用来更新服务器上的任何内容,但我也不一定想在 URL 中公开信息。

这是一个内部 Web 服务,只有调用该服务的前端是公开的,所以我不必担心 URL 会出现在用户的浏览器历史记录中。我唯一担心的是不太可能有人获得服务器日志访问权限,在这种情况下,我会遇到更大的问题。

出于安全原因,我倾向于 POST;然而,由于请求是幂等的,GET 感觉是正确的方法。在这种情况下推荐的方法是什么?

4

3 回答 3

5

独立于 POST 与 GET,我建议不要将您的安全性作为邮政编码和发票号码这样简单的东西。我敢打赌发票号码是连续的(或接近的),并且周围没有那么多邮政编码 - 瞧,我可以完全访问您的列表。

如果您正在使用另一种身份验证方法(通常在 HTTP 标头中),那么您很好 - 如果您有发票号码,如果 URL 没有关系,那么不妨使用 GET。

如果你不是,那么我想 POST 在暴露机密内容方面并不像 GET 那样糟糕。

于 2013-04-16T21:39:09.880 回答
0

POST 与 GET 相比,实际上并没有增加任何安全性。当然,请求不在 URL 中,但我们在这里讨论的是 REST,而且 URL 无论如何都不会被人类看到。

于 2013-04-16T21:52:03.493 回答
0

您的问题始于一些错误的假设。首先,GET不只是针对任何旧的幂等操作,它是针对GET来自服务器的资源;碰巧这样做应该没有副作用。其次,URL 不是 GET 请求向服务器发送数据的唯一方式,您可以在GET请求中使用有效负载(至少就 HTTP 而言,有些实现很糟糕,不支持这个或使很难)。第三,正如所指出的,您选择了一些糟糕的数据字段来保护您的访问。最后,您以任何方式使用纯文本协议,因此这两种方法都没有真正提供和更好的安全性。

你应该使用最能描述你在做什么的动词,你正在从服务器获取一些信息,所以使用GET. 使用一些适当的安全性,例如基本的 HTTPS 加密。如果您想避免这些字段“阻塞” URL,您可以在请求的有效负载中发送数据,例如:

GET /listings HTTP/1.1
Content-Type = application/json

{ "zip"     : "IN0N0USZ1PC0D35",
  "invoice" : "54859081145" }
于 2015-08-10T14:06:38.467 回答