除了语义之外,不同的 HTTP 请求方法之间的实际区别是什么?
What is the actual difference between the different HTTP request methods besides semantics?
我看过很多关于这个的讨论,比如PUT是幂等的而POST不是等。但是,这最终不取决于服务器是如何实现的吗?开发人员始终可以构建后端服务器,使 PUT 请求不是幂等的,并为多个请求创建多个记录。开发人员还可以为 PUT 请求构建端点,使其像 DELETE 请求一样运行并删除数据库中的记录。
所以我的问题是,考虑到我们不考虑任何服务器端代码,HTTP 方法之间是否存在真正的区别?例如,GET 和 POST 的真正区别在于您不能使用 GET 请求发送正文,但可以使用 POST 请求发送正文。另外,据我了解,大多数浏览器通常默认缓存 GET 请求。
HTTP 请求方法是否不仅仅是一种逻辑结构(语义),以便作为开发人员我们可以 "expect" 基于我们发送的 HTTP 请求类型的特定行为?
超文本传输协议 (HTTP) 旨在实现客户端和服务器之间的通信。
HTTP 作为客户端和服务器之间的请求-响应协议。
Web 浏览器可能是客户端,而托管网站的计算机上的应用程序可能是服务器。
示例:客户端(浏览器)向服务器提交HTTP请求;然后服务器 returns 对客户端的响应。响应包含有关请求的状态信息,也可能包含请求的内容。
HTTP 方法
得到
POST
放置
头
删除
补丁
选项
GET 方法
GET用于从指定资源请求数据。
GET 是最常见的 HTTP 方法之一。
请注意,查询字符串(name/value 对)在 GET 请求的 URL 中发送。
POST 方法
POST 用于将数据发送到服务器到 create/update 资源。
用POST发送到服务器的数据存储在HTTP请求的请求体中。
POST 是最常见的 HTTP 方法之一。
PUT 方法
PUT 用于将数据发送到服务器 create/update 资源。
POST和PUT的区别在于PUT请求是幂等的。也就是说,多次调用同一个 PUT 请求将始终产生相同的结果。相反,重复调用 POST 请求会产生多次创建相同资源的副作用。
HEAD 方法
HEAD 与 GET 几乎相同,但没有响应主体。
换句话说,如果 GET /users return 是用户列表,那么 HEAD /users 将发出相同的请求,但不会 return 用户列表。
HEAD 请求可用于在实际发出 GET 请求之前检查 GET 请求的内容 return - 比如在下载大文件或响应正文之前。
删除方法
DELETE 方法删除指定的资源。
OPTIONS 方法
OPTIONS 方法描述了目标资源的通信选项。
来源。 w3schools
你是对的,大多数差异都在语义层面上,如果你的组件决定分配其他语义,这也会起作用。 除非涉及您无法控制的组件(库、代理、负载平衡器等)。
例如,某些组件可能利用 PUT 是幂等的这一事实,因此可以重试,而 POST 则不是。
我看过很多关于这个的讨论,比如PUT是幂等的而POST不是等。但是,这最终不取决于服务器是如何实现的吗?开发人员始终可以构建后端服务器,使 PUT 请求不是幂等的,并为多个请求创建多个记录。开发人员还可以为 PUT 请求构建端点,使其像 DELETE 请求一样运行并删除数据库中的记录。
所以我的问题是,考虑到我们不考虑任何服务器端代码,HTTP 方法之间是否存在真正的区别?例如,GET 和 POST 的真正区别在于您不能使用 GET 请求发送正文,但可以使用 POST 请求发送正文。另外,据我了解,大多数浏览器通常默认缓存 GET 请求。
HTTP 请求方法是否不仅仅是一种逻辑结构(语义),以便作为开发人员我们可以 "expect" 基于我们发送的 HTTP 请求类型的特定行为?
超文本传输协议 (HTTP) 旨在实现客户端和服务器之间的通信。
HTTP 作为客户端和服务器之间的请求-响应协议。
Web 浏览器可能是客户端,而托管网站的计算机上的应用程序可能是服务器。
示例:客户端(浏览器)向服务器提交HTTP请求;然后服务器 returns 对客户端的响应。响应包含有关请求的状态信息,也可能包含请求的内容。
HTTP 方法
得到
POST
放置
头
删除
补丁
选项
GET 方法
GET用于从指定资源请求数据。
GET 是最常见的 HTTP 方法之一。
请注意,查询字符串(name/value 对)在 GET 请求的 URL 中发送。
POST 方法
POST 用于将数据发送到服务器到 create/update 资源。
用POST发送到服务器的数据存储在HTTP请求的请求体中。
POST 是最常见的 HTTP 方法之一。
PUT 方法
PUT 用于将数据发送到服务器 create/update 资源。
POST和PUT的区别在于PUT请求是幂等的。也就是说,多次调用同一个 PUT 请求将始终产生相同的结果。相反,重复调用 POST 请求会产生多次创建相同资源的副作用。
HEAD 方法
HEAD 与 GET 几乎相同,但没有响应主体。
换句话说,如果 GET /users return 是用户列表,那么 HEAD /users 将发出相同的请求,但不会 return 用户列表。
HEAD 请求可用于在实际发出 GET 请求之前检查 GET 请求的内容 return - 比如在下载大文件或响应正文之前。
删除方法
DELETE 方法删除指定的资源。
OPTIONS 方法
OPTIONS 方法描述了目标资源的通信选项。
来源。 w3schools
你是对的,大多数差异都在语义层面上,如果你的组件决定分配其他语义,这也会起作用。 除非涉及您无法控制的组件(库、代理、负载平衡器等)。
例如,某些组件可能利用 PUT 是幂等的这一事实,因此可以重试,而 POST 则不是。