解释请求动词
HTTP 方法提供了一种方法来指定要对给定资源执行的所需操作。结果取决于服务器的实现,它可以是预先存在的数据或动态生成的数据。
最常用的 HTTP 方法是 GET、POST、PUT、PATCH 和 DELETE,它们对应于 CRUD(创建、读取、更新、删除)操作。
请求方法:
- GET: GET 方法用于检索由 Request-URL 标识的信息。它是信息检索的主要模式。它不会改变所请求资源的状态,据说是一种安全的方法。如果请求 URL 引用数据生成过程,则生成的数据将作为响应而不是源文本返回,除非文本是过程的输出。
- POST: POST 方法用于将数据作为请求体发送到服务器。此方法表明请求正文中的数据旨在被接受并且最有可能存储在服务器中。 Content-Type 标头指示请求正文的类型。它主要用于上传文件或提交完整的 Web 表单时。在响应包含适当的 Cache-Control 或 Expires 标头字段之前,对该方法的响应是不可缓存的。
- PUT: PUT 方法用于替换资源的现有状态,或者如果资源不存在(由源服务器决定),则使用请求有效负载创建资源。
- PATCH: PATCH 方法用于对资源进行部分更新。它可以被认为是描述修改服务器上已经存在的数据以产生新版本数据的指令集,它不被认为是完整的资源。
- DELETE: DELETE 方法用于删除源服务器上的指定资源。即使从服务器返回的状态码表明它已执行,客户端也不能保证该操作已执行。
- HEAD: HEAD 与 GET 请求相同,但服务器不得发送响应正文,但应发送与使用 GET 方法请求 URI 时发送的相同标头。它可用于在不从服务器传输响应正文的情况下获取元数据,并且通常用于测试超文本链接的有效性、可访问性和最近的修改。
- CONNECT: CONNECT方法用于通过代理服务器建立端到端的HTTP隧道。
- OPTIONS: OPTIONS 方法请求给定资源的允许通信选项。可以发送此请求以找出支持的 HTTP 方法和其他支持的选项,而无需请求资源。
- TRACE: TRACE 方法请求服务器在响应正文中发送它收到的确切请求。它可用于诊断目的。
一个简单的 GET 请求在 javascript 中:
Javascript
// GET request
fetch("https://jsonplaceholder.typicode.com/users/2")
// Convert response to json
.then((response) => response.json())
// Print data to console
.then((data) => console.log(data));
重要术语:
- 安全:如果 HTTP 方法不改变服务器的状态,它就是安全的。换句话说,如果一个方法只能用于读取或检索数据,那么它就是安全的。有几种 HTTP 方法是安全的,例如 GET 和 HEAD。所有安全方法都是幂等的,但反之则不然。例如 PUT 和 DELETE,这两种方法都是幂等的,但不安全。
- 幂等:如果操作在执行一次或多次时产生相同的结果而使服务器处于相同状态,则 HTTP 方法是幂等的。换句话说,无论执行多少次,幂等方法都不应导致任何意想不到的效果。如果正确实现了 GET、HEAD、PUT 和 DELETE 方法,则它们是幂等的。所有安全方法也是幂等的。
- 可缓存的:可缓存的响应是可以缓存的HTTP响应,存储起来以便以后访问,将新的请求保存到服务器。这避免了对服务器的不必要请求。
Request method | Request has payload | Response has payload | Safe | Idempotent | Cacheable |
---|---|---|---|---|---|
GET | Optional | Yes | Yes | Yes | Yes |
POST | Yes | Yes | No | No | Yes |
PUT | Yes | Yes | No | Yes | No |
PATCH | Yes | Yes | No | No | No |
DELETE | Optional | Yes | No | Yes | No |
HEAD | Optional | No | Yes | Yes | Yes |
CONNECT | Optional | Yes | No | No | No |
OPTIONS | Optional | Yes | Yes | Yes | No |
TRACE | No | Yes | Yes | Yes | No |