URL真的可以被认为是HTTP响应的唯一密钥吗?

时间:2010-01-25 13:59:28

标签: http

这个问题可以看作是实践问题和理论问题。

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

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

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

Brackets表示变量值,即显然这些和'asset_id'不是逐字逐句采用的,它们表示实际的资产标识符。 HTTP请求“到”上述URL应带有带有用户会话标识符的cookie标头,该标头唯一地验证并授权用户作为所请求资产的所有者。

我非常追求永久性URL(“酷URI不会像Tim Berners-Lie所说的那样改变”),但显然,由于资产资源对于上传/拥有它们的用户来说是私有的,所以它们不是由任何中间代理缓存,只有用户代理缓存。

我们可以将上述网址视为识别用户资产的好方法吗?我担心的是,响应将根据是否提供有效的会话标识符cookie标头而有所不同,因此URL和响应之间不存在一对一的关系。但是没有太多可以做的,是吗?服务器要检查用户是否有权检索资产,对吗?如果你们在这里有更好的解决方案建议,我也很想听到它。感谢。

2 个答案:

答案 0 :(得分:2)

你已经说了这一切,我不会改变你的策略:-)如果未经授权的用户试图访问某些资产,只需给他一个403 http代码...这是正确和预期的响应那个案子

答案 1 :(得分:1)

仅仅因为URL没有改变并不意味着对该URL的每个请求必须成功(或者甚至返回相同的对象/资产)。

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