【发布时间】:2010-09-03 19:03:39
【问题描述】:
我需要保持客户端状态,我想知道这种方法会出现什么问题。
我想向使用 HTTPS 和基本身份验证的客户端提供一个 URL,他们只会 PUT 和 GET 包含 JSON 的 Blob 文本。在服务器端,我可以在 PUTting 时解析它,看看它在存储之前是否语义正确。
这有什么问题?
【问题讨论】:
我需要保持客户端状态,我想知道这种方法会出现什么问题。
我想向使用 HTTPS 和基本身份验证的客户端提供一个 URL,他们只会 PUT 和 GET 包含 JSON 的 Blob 文本。在服务器端,我可以在 PUTting 时解析它,看看它在存储之前是否语义正确。
这有什么问题?
【问题讨论】:
是的,PUT 也可以用于创建。不同之处在于,使用 POST,您通常将数据发送到集合的 URI,而服务器确定最终创建资源的 URI(在“201 created”响应的“location”标头中返回给您)。
但是,如果客户端可以控制资源的 URI,那么您也可以直接使用 PUT 到所需的资源 URI,而不是到集合的 URI。
另一种思考方式是,按照惯例,PUT 必须是幂等的,而 POST 则不是。这意味着 PUT 请求是发送一次还是多次发送都没有区别。结果是一样的:第一次创建新实体时,任何额外的 PUT 只会更新实体,但使用相同的数据,所以没有真正改变。
但是,如果您重新发送 POST 请求(到集合 URI),那么您实际上会在集合中创建多个(尽管相同)条目。这也是为什么您的网络浏览器会询问您是否要重新提交表单(通常是 POST),因为提交一次与多次提交是完全不同的。
【讨论】:
您确定要使用 PUT 而不是 POST 吗?通常,PUT 用于更新数据,POST 用于添加新数据。
GET 的一个问题是可以在客户端缓存数据。
除此之外 - 我没有看到任何问题。
【讨论】: