发起PUT请求更新服务器实体但实体不存在时的服务器行为问询
PUT请求目标实体不存在时的行为
这个问题其实是HTTP规范里常被问到的细节,我来给你拆解清楚:
HTTP标准规范的定义:
根据RFC 7231的规定,PUT方法的核心是「让请求体里的实体成为目标URI的当前状态」。直白点说,如果目标URI对应的资源压根不存在,服务器应当创建这个资源,同时返回201 Created状态码;如果资源已经存在,就直接替换它,返回200 OK或者204 No Content。实际场景中的例外情况:
不过现实里很多服务器会加额外的业务或权限限制,比如:- 有些API要求必须先用POST创建资源,再用PUT更新,这时候你PUT一个不存在的实体,服务器会返回
404 Not Found或者409 Conflict。 - 还有些后端团队把PUT严格限定为「更新操作」,只允许对已存在的资源执行,这种情况下也会直接返回错误状态码。
- 有些API要求必须先用POST创建资源,再用PUT更新,这时候你PUT一个不存在的实体,服务器会返回
怎么确认你用的服务器/API的行为?
最靠谱的方式就是看对应API的官方文档,或者自己做个小测试:发一个PUT请求到不存在的URI,看返回的状态码和响应内容。比如返回201就说明服务器会自动创建;要是返回4xx开头的状态码,那就是不允许通过PUT创建新资源。
举个简单例子:你发送PUT请求到/api/users/123,但用户123还不存在。符合规范的服务器会直接创建这个用户,返回201,响应里可能还会附带新资源的URI;而严格限制更新的服务器会返回404,告诉你这个资源找不到。
内容的提问来源于stack exchange,提问作者Johnny Five
相关产品推荐
相关产品推荐

