代码之家  ›  专栏  ›  技术社区  ›  Armen Michaeli

URL真的可以被认为是HTTP响应的唯一键吗?[关闭]

  •  3
  • Armen Michaeli  · 技术社区  · 15 年前

    这个问题可以看作是实际的,也可以看作是理论上的。

    我正在设计一个包含HTTP客户机(FlashPlayer应用程序)和HTTP服务器“后端”的系统。有注册用户,每个用户都有自己的私有图像库。图像可以上传,当然可以随后检索。

    由于用户使用带有会话标识符的cookie进行身份验证,我突然意识到(以及由此产生的问题),我可以为经过身份验证的客户机提供以下类型的URL来检索图像(在我的术语中是“资产”)。请注意,即使跨用户,资产标识符也是唯一的,即没有两个用户都拥有ID为555的资产。此外,假定资产标识符是真正持久的,即ID是不可重用的。我想到的网址是:

    http://myserver/user/asset/<asset_id>
    

    括号表示可变值,也就是说,很明显,这些值和“资产ID”在这里不是逐字取的,它们表示实际的资产标识符。上述URL的HTTP请求“to”应该带有一个具有用户会话标识符的cookie头,该头将唯一地验证并授权用户作为所请求资产的所有者。

    我非常喜欢永久URL(正如TimBerners曾经说过的那样,“酷的URI不会改变”),但是很明显,由于资产资源对上传/拥有它们的用户是私有的,所以它们不会被任何中间代理缓存,只有用户代理。

    我们是否可以将上面的URL视为识别用户资产的好方法?我担心的是响应将根据是否提供有效的会话标识符cookie头而变化,因此URL和响应之间没有一对一的关系。但是没有什么可以做的,是吗?服务器必须检查用户是否有权检索资产,对吗?如果你们对这里的解决方案有更好的建议,我也很想听听。谢谢。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Joel Martinez    15 年前

    你已经说过了,我不会改变你的策略。—)如果一个未经授权的用户试图访问某些资产,只需给他一个403 HTTP代码…在这种情况下,这是正确的预期反应。

        2
  •  1
  •   Joachim Sauer    15 年前

    只是因为网址不变并不意味着 每一个 对该URL的请求必须成功(或者甚至返回相同的对象/资产)。

    您可以轻松地将其用作标识符,并简单地告诉未经身份验证的客户机它们是 401 Not Authorized 甚至他们根本无法访问: 403 Forbidden .