HTTP请求是浏览器与服务器进行数据交互的核心手段。不同的请求方式(如GET、POST、PUT、DELETE等)有着不同的语义和适用场景。
1. HTTP请求方式概述
以下是前端开发中最常用的几种请求方式:
- GET:获取资源。
- POST:提交数据。
- PUT:更新资源。
- DELETE:删除资源。
- PATCH:部分更新资源。
- HEAD:获取资源的元信息。
- OPTIONS:获取服务器支持的请求方法。
2. 常见请求方式的详细解析
2.1 GET
使用场景
- 用于从服务器获取资源。
- 适用于不涉及敏感信息的请求,如获取文章列表、查询商品信息等。
特点
- 请求参数附加在URL中(查询字符串)。
- 数据长度有限制(受URL长度限制)。
- 请求可以被缓存。
- 多次请求结果相同。
示例
| 12
 3
 
 | fetch('https://api.wyxup.top/data?id=123').then(response => response.json())
 .then(data => console.log(data));
 
 | 
2.2 POST
使用场景
- 用于向服务器提交数据。
- 适用于涉及敏感信息的请求,如用户登录、表单提交等。
特点
- 请求参数放在请求体中。
- 数据长度无限制。
- 请求不会被缓存。
- 多次请求可能产生不同结果。
示例
| 12
 3
 4
 5
 6
 7
 
 | fetch('https://api.wyxup.top/data', {method: 'POST',
 headers: { 'Content-Type': 'application/json' },
 body: JSON.stringify({ name: 'Wyx', age: 24 })
 })
 .then(response => response.json())
 .then(data => console.log(data));
 
 | 
2.3 PUT
使用场景
- 用于更新服务器上的资源。
- 适用于更新整个资源的场景,如更新用户信息。
特点
- 请求参数放在请求体中。
- 多次请求结果相同。
- 通常需要指定资源的唯一标识(如id)。
示例
| 12
 3
 4
 5
 6
 7
 
 | fetch('https://api.wyxup.top/data/123', {method: 'PUT',
 headers: { 'Content-Type': 'application/json' },
 body: JSON.stringify({ name: 'Wyx', age: 24 })
 })
 .then(response => response.json())
 .then(data => console.log(data));
 
 | 
2.4 DELETE
使用场景
- 用于删除服务器上的资源。
- 适用于删除数据的场景,如删除用户、删除文章等。
特点
- 请求参数通常放在URL中。
- 多次请求结果相同。
- 通常需要指定资源的唯一标识(如id)。
示例
| 12
 3
 4
 5
 
 | fetch('https://api.wyxup.top/data/123', {method: 'DELETE'
 })
 .then(response => response.json())
 .then(data => console.log(data));
 
 | 
2.5 PATCH
使用场景
- 用于部分更新服务器上的资源。
- 适用于只更新资源的部分字段的场景,如更新用户的邮箱地址。
特点
- 请求参数放在请求体中。
- 多次请求可能产生不同结果。
- 通常需要指定资源的唯一标识(如id)。
示例
| 12
 3
 4
 5
 6
 7
 
 | fetch('https://api.wyxup.top/data/123', {method: 'PATCH',
 headers: { 'Content-Type': 'application/json' },
 body: JSON.stringify({ email: 'new-email@wyxup.top' })
 })
 .then(response => response.json())
 .then(data => console.log(data));
 
 | 
2.6 HEAD
使用场景
- 用于获取资源的元信息,而不获取资源本身。
- 适用于检查资源是否存在、获取资源的最后修改时间等。
特点
- 请求参数附加在URL中。
- 响应不包含主体(Body),只包含头部(Headers)。
示例
| 12
 3
 4
 
 | fetch('https://api.wyxup.top/data/123', {method: 'HEAD'
 })
 .then(response => console.log(response.headers));
 
 | 
2.7 OPTIONS
使用场景
- 用于获取服务器支持的请求方法。
- 适用于跨域请求预检(CORS Preflight)。
特点
- 请求参数附加在URL中。
- 响应包含服务器支持的请求方法。
示例
| 12
 3
 4
 
 | fetch('https://api.wyxup.top/data', {method: 'OPTIONS'
 })
 .then(response => console.log(response.headers.get('Allow')));
 
 | 
3. 对比
| 请求方式 | 语义 | 幂等性 | 安全性 | 缓存 | 请求参数位置 | 使用场景 | 
| GET | 获取资源 | 是 | 安全 | 可缓存 | URL | 获取数据,如文章列表、商品信息 | 
| POST | 提交数据 | 否 | 不安全 | 不可缓存 | 请求体 | 提交表单、用户登录 | 
| PUT | 更新资源 | 是 | 不安全 | 不可缓存 | 请求体 | 更新整个资源,如用户信息 | 
| DELETE | 删除资源 | 是 | 不安全 | 不可缓存 | URL | 删除数据,如删除用户、文章 | 
| PATCH | 部分更新资源 | 否 | 不安全 | 不可缓存 | 请求体 | 更新部分字段,如用户邮箱 | 
| HEAD | 获取元信息 | 是 | 安全 | 可缓存 | URL | 检查资源是否存在、获取元信息 | 
| OPTIONS | 获取支持方法 | 是 | 安全 | 不可缓存 | URL | 跨域请求预检、获取支持方法 |