前言
年前面试面了好几家中小厂都问到了 HTTP 的请求方法,把 GET、POST、HEAD、DELETE 这几种讲完就阿巴阿巴断断续续了,所以搞一期文章学习一下。
这篇文章中我们会涉及:
- HTTP的请求方法有哪些
- 这些请求方法的用途
- 【重点】方法之间的区别
- GET 和 POST 的区别
- PUT 和 POST 的区别
- 附上具体面试题
HTTP的请求方法有哪些
- HTTP1.0定义了三种请求方法: GET , POST 和 HEAD 方法
- HTTP1.1新增了五种请求方法:OPTIONS , PUT , DELETE , TRACE 和 CONNECT
- 另外,在HTTP1.1之后的RFC 5789中引入了PATCH方法。
这些请求方法的用途
1. GET 方法
- 发送一个请求获得服务器上的资源
2. POST 方法
- 向 URL 指定的资源提交数据或者附加新的数据
3. HEAD 方法
- 请求页面的头部信息,这些头部信息与 HTTP GET 方法请求时返回的一致
4. OPTIONS 方法
- 它用于获取当前 URL 所支持的方法。如果请求成功,会有一个 Allow 的头包含类似"Get、Post" 这样的信息
5. PUT 方法
- PUT方法将请求的数据存储到指定的URL位置,用于创建或更新资源
6. DELETE 方法
- 删除服务器上的指定的资源
7. TRACE 方法
- 用于回显服务器收到的请求,主要用于测试或诊断。
8. CONNECT 方法
- 用于与代理服务器建立隧道连接,通常用于支持HTTPS的代理服务器。
9. PATCH 方法
- 用于对资源进行部分修改
【重点】每个方法之间的区别
GET和POST的区别
这两种方法在使用场景 、传递数据方式 和安全性等方面存在一些区别:
-
使用场景:
-
GET: 用于从服务器获取资源,是一种安全 且幂等 的请求方法。GET请求的参数通常附在URL中,通过查询字符串传递。因为参数暴露在URL中,不适合传递敏感信息。
-
POST: 用于向服务器提交数据,请求服务器进行处理。适合用于提交表单、上传文件等场景。POST请求的数据通常包含在请求体中,而不是在URL中。
-
👇👇👇注意:"幂等"(Idempotent)是一个重要的概念,指的是对同一操作的多次执行所产生的效果与执行一次的效果相同。一个幂等操作满足以下两个条件:
- 相同输入产生相同结果
- 不论执行多少次,效果相同
-
-
数据传递方式:
- GET: 参数通过URL的查询字符串传递,如
?key1=value1&key2=value2
。数据附加在URL中,有长度限制,一般不适合传递大量数据。 - POST: 数据通过请求体传递,而不是附加在URL中。可以传递大量数据,且对数据长度没有严格的限制。
- GET: 参数通过URL的查询字符串传递,如
-
安全性:
- GET: 参数暴露在URL中,可能被浏览器历史记录、代理服务器等记录。因此,不适合传递敏感信息。由于是幂等的,对服务器状态没有影响。
- POST: 请求的数据在请求体中,不会暴露在URL中,相对更安全。适合传递敏感信息。POST请求对服务器状态可能有影响,不是幂等的。
-
缓存:
- GET: 结果可以被缓存,因为GET请求是幂等的,对服务器状态没有影响。
- POST: 结果不能被缓存,因为POST请求可能对服务器状态产生影响,不是幂等的。
-
书签:
- GET: 可以被书签化,因为GET请求只是获取数据,不对服务器产生影响。
- POST: 不适合被书签化,因为POST请求可能导致服务器状态变化,不是幂等的。
PUT和POST的区别
这两者在用途、数据处理方式以及幂等性等方面存在一些区别:
-
用途:
- PUT: 用于将请求的数据存储到指定的URL位置,通常用于更新资源或在服务器上创建新资源。PUT请求要求客户端提供完整的资源数据,对于已存在的资源,是整体替换。
- POST: 用于向指定资源提交数据,请求服务器进行处理。通常用于提交表单、上传文件等场景,且不要求客户端提供完整的资源数据。POST请求可以用于创建新资源,也可以用于更新资源的一部分。
-
数据处理方式:
- PUT: 要求客户端提供完整的资源数据,服务器将该数据存储到指定的URL位置。如果URL已存在相同资源,通常是整体替换。
- POST: 不要求客户端提供完整的资源数据,数据通常包含在请求体中。服务器根据请求执行相应的处理,可能是创建新资源或更新部分资源。
-
幂等性:
- PUT: 幂等的。多次执行相同的PUT请求对服务器状态没有额外影响,因为它是整体替换。
- POST: 通常不是幂等的,因为多次执行相同的POST请求可能会导致服务器上相同资源状态的多次变化。
-
安全性:
- PUT: 通常较安全,因为它是幂等的,而且执行PUT请求不会产生额外的影响。
- POST: 相对较不安全,因为执行POST请求可能对服务器状态产生影响,且不是幂等的。
-
适用场景:
- PUT: 适用于需要提供完整资源数据,执行整体替换的场景。例如,更新文档或文件的内容。
- POST: 适用于向服务器提交数据,执行各种处理操作,如表单提交、文件上传等。