代码之家  ›  专栏  ›  技术社区  ›  StackedCrooked

URL编码张贴错误做法?

  •  6
  • StackedCrooked  · 技术社区  · 15 年前

    我正在(只是为了好玩)尝试实现一个高分的Web服务。我希望它与REST原则兼容。我想使用这样的URL参数添加一个新的高分 http://mydomain.com/hs/add&name=John&score=987 . 根据休息,这必须使用一个张贴请求完成。这将导致空的post请求,其中包含URL参数中的所有数据。这会被视为一种坏做法吗?

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

    6 回复  |  直到 15 年前
        1
  •  12
  •   Artefacto    15 年前

    通常的方法是将邮件发送到 http://mydomain.com/hs/add 内容:

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

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

    编辑

    在查询字符串中传递数据并发布一个空的主体是一种坏的做法吗?

    对。URL应该描述正在接受HTTP方法描述的操作的资源。因此,最好的选择可能是 http://mydomain.com/hs 作为一个URL,让主体完全描述这个动作。

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

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

        2
  •  2
  •   Guffa    15 年前

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

    所以,正确的URL应该是 http://mydomain.com/hs ,您将改为发送post数据中的参数。因为这是一个POST请求,所以它将向资源添加数据。

        3
  •  1
  •   Darrel Miller    15 年前

    不,就REST而言,在日志中使用URL参数并不是一个坏习惯。对我来说,这似乎是一个完全有效的方法。

    从美学的角度来看,我建议一个网址,比如

     POST http://mydomain.com/highscores?name=John&score=987
    
        4
  •  0
  •   Ed B    15 年前

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

        5
  •  0
  •   STO    15 年前

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

    • 用户登录
    • Web浏览器在会话之间保存身份验证信息
    • 例如,用户收到一封包含标签的电子邮件 IMG SRC= http://mydomain.com/hs/add?name=John&score=987 …/gt;
    • 邮件客户端尝试下载图像,自动使用Web浏览器中存储的凭据,并在系统中自动添加或删除信息。
        6
  •  0
  •   Kenneth Reitz    15 年前

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

    这样用户就不会:

    • 意外地再次转到URL并将所有数据变脏
    • 有目的地更改数据库