# http的方法

根据 HTTP 标准，HTTP 请求可以使用多种请求方法。

HTTP1.0 定义了三种请求方法： GET, POST 和 HEAD方法。

HTTP1.1 新增了六种请求方法：OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

| 序号 | 方法      | 描述                                                                      |
| -- | ------- | ----------------------------------------------------------------------- |
| 1  | GET     | 请求指定的页面信息，并返回实体主体。                                                      |
| 2  | HEAD    | 类似于 GET 请求，只不过返回的响应中没有具体的内容，用于获取报头                                      |
| 3  | POST    | 向指定资源提交数据进行处理请求（例如提交表单或者上传文件）。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
| 4  | PUT     | 从客户端向服务器传送的数据取代指定的文档的内容。                                                |
| 5  | DELETE  | 请求服务器删除指定的页面。                                                           |
| 6  | CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。                                       |
| 7  | OPTIONS | 获取目的资源所支持的通信选项                                                          |
| 8  | TRACE   | 回显服务器收到的请求，主要用于测试或诊断。                                                   |
| 9  | PATCH   | 是对 PUT 方法的补充，用来对已知资源进行局部更新 。                                            |

### PUT和POST都是给服务器发送新增资源，有什么区别？

PUT 和POST方法的区别是,PUT方法是幂等的：连续调用一次或者多次的效果相同（无副作用），而POST方法是非幂等的。

举个例子，我们在开发一个博客系统，当我们要创建一篇文章的时候往往用`POST https://www.jianshu.com/articles`，这个请求的语义是，在articles的资源集合下创建一篇新的文章，如果我们多次提交这个请求会创建多个文章，这是非幂等的。

而`PUT https://www.jianshu.com/articles/820357430`的语义是更新对应文章下的资源（比如修改作者名称等），这个URI指向的就是单一资源，而且是幂等的，比如你把『刘德华』修改成『蔡徐坤』，提交多少次都是修改成『蔡徐坤』

{% hint style="info" %}
『POST表示创建资源，PUT表示更新资源』这种说法是错误的，两个都能创建资源，根本区别就在于幂等性
{% endhint %}

## options方法

**HTTP 的 `OPTIONS 方法`** 用于获取目的资源所支持的通信选&#x9879;**。**

可以使用 OPTIONS 方法对服务器发起请求，以检测服务器支持哪些 HTTP 方法：

```
curl -X OPTIONS http://example.org -i
```

响应报文包含一个 [`Allow`](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Allow) 首部字段，该字段的值表明了服务器支持的所有 HTTP 方法：

```
HTTP/1.1 200 OK
Allow: OPTIONS, GET, HEAD, POST
Cache-Control: max-age=604800
Date: Thu, 13 Oct 2016 11:45:00 GMT
Expires: Thu, 20 Oct 2016 11:45:00 GMT
Server: EOS (lax004/2813)
x-ec-custom-error: 1
Content-Length: 0
```

#### CORS 中的预检请求 <a href="#cors-zhong-de-yu-jian-qing-qiu" id="cors-zhong-de-yu-jian-qing-qiu"></a>

在 [CORS](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS) 中，可以使用 OPTIONS 方法发起一个预检请求，以检测实际请求是否可以被服务器所接受。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mm.ricky.moe/network/ji-suan-ji-wang-luo/http-de-fang-fa.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
