GET、POST、PUT、PATCH、DELETE 的安全性与幂等性如何区分?

先理解原理和示例,再练习完整口述与追问。

safe 指预期不改变服务器业务状态;幂等指重复请求预期效果相同;与响应是否相同无关;接口仍需正确实现。

HTTP 的“安全方法”是协议语义,指客户端预期进行只读操作,例如 GET、HEAD,而不是保证参数保密或没有日志副作用。幂等指同一个请求执行多次,与执行一次对服务器产生的预期业务效果相同,不要求每次状态码和响应完全一样。

PUT 通常表示在目标 URI 创建或整体替换资源,语义上幂等;DELETE 删除同一个资源也幂等,即使第一次成功、第二次返回 404,最终资源不存在的效果仍一致。PATCH 表示局部修改,是否幂等取决于补丁操作,例如“把状态设为完成”可以幂等,“余额加 10”则不是天然幂等。POST 常用于提交处理、创建子资源,协议不保证幂等,但业务可以借助幂等键、唯一约束和事务实现重复请求只产生一次效果。

GET 不应该承载扣款或删除等操作。HTTPS 会加密传输中的路径和请求体,但 URL 仍可能进入历史、日志或 Referer,所以敏感信息也不应随意放查询参数。重试支付、下单等请求时,必须结合服务端幂等协议,不能因网络超时就认为服务器没有处理。

DELETE /items/1 第一次返回 204,第二次返回 404,最终资源均不存在,仍符合幂等效果。PATCH balance+=10 重复两次与一次不同,不天然幂等;PATCH status=done 则可能幂等。POST 下单可以通过同一幂等键与服务端唯一约束获得业务上的一次效果。

方法名称不会自动强制后端正确实现,GET 也可能被错误用于修改数据。自动重试应根据实际协议和业务效果判断。

HTTP 的“安全方法”是协议语义,指客户端预期进行只读操作,例如 GET、HEAD,而不是保证参数保密或没有日志副作用。幂等指同一个请求执行多次,与执行一次对服务器产生的预期业务效果相同,不要求每次状态码和响应完全一样。