URL编码POST不好的做法?

时间:2010-06-15 21:25:11

标签: rest

我(只是为了好玩)尝试实施高分网络服务。我希望它与REST原则兼容。我希望能够使用像这个http://mydomain.com/hs/add&name=John&score=987这样的url参数添加新的高分。根据REST,这必须使用POST请求完成。这会导致空POST请求,其中包含URL参数中包含的所有数据。这会被认为是一种不好的做法吗?

更新
安全目前不是一个大问题。

6 个答案:

答案 0 :(得分:12)

执行此操作的常用方法是使用内容发送POST到http://mydomain.com/hs/add

name=John&score=987(对于简单的urlencoded数据,对于例如多部分编码数据会有所不同; POST请求体的格式是任意的,超出了REST建议的范围 - 它甚至可以是任意加密数据,如其他人建议)。

添加新的高分的GET请求不仅违反了REST原则,而且违反了RFC 2616,这要求GET请求是幂等的。

修改

  

在查询字符串中传递数据并发布空体是不好的做法吗?

是。 URL应描述受HTTP方法描述的操作的资源。因此,最好的选择可能是将http://mydomain.com/hs作为一个URL,然后让正文完整地描述该行为。

查询字符串可能用于进一步限定没有正文的请求,例如:

http://mydomain.com/hs?period=lastmonth(GET)

答案 1 :(得分:2)

您在参数前使用问号,因此它将是:http://mydomain.com/hs/add?name=John&score=987。但是,我们的想法是URL应该是资源的名称,请求方法应该决定做什么。

因此,正确的URL只是http://mydomain.com/hs,您可以在POST数据中发送参数。因为它是一个POST请求,它会将数据添加到资源中。

答案 2 :(得分:1)

不,就REST而言,在POST中使用url参数并不是坏习惯。这对我来说似乎是一种非常有效的方法。

从美学角度来看,我建议使用诸如

之类的网址
 POST http://mydomain.com/highscores?name=John&score=987

答案 3 :(得分:0)

非常糟糕......用户可以操纵分数。在通过查询字符串提交分数之前,您应该应用某种加密,即使它很简单

答案 4 :(得分:0)

获取数据时应使用GET。添加或操作数据时,应始终使用POST。

这样用户就不会:

  • 无意中再次访问该网址并将所有数据弄脏
  • 有目的地改变您的数据库

答案 5 :(得分:0)

使用POST请求来防止以下情况:

  • 用户登录
  • Web浏览器在会话
  • 之间保存身份验证信息
  • 用户收到一封包含HTML标签的电子邮件 < img src ='http://mydomain.com/hs/add?name=John&score=987'... />
  • 邮件客户端尝试下载图像,自动使用存储在Web浏览器中的凭据,并以静默方式向/向系统添加或删除信息。