一、GET

GET 方法通常用于获取资源。在 GET 请求中一般不会包含呈现数据(如 HTML 文本、图片、视频等)。

使用中发现:

  1. postman 和浏览器均无法携带 请求体
  2. es 查询可以

二、HEAD

获取报文的首部。和 GET 方法是一样的,但是他不反悔报文实体的主体部分。主要用于确认 URL 的有效性以及资源更新的日期时间等。

三、POST 一般用于传输实体主体,主要用来传输数据。

GET 和 POST 的区别

  1. 作用: GET 主要用来获取资源、POST 主要用来传输实体主体(数据)。
  2. 参数:GET 和 POST 的请求都能使用额外参数,但是 GET 的参数是以查询字符串出现在 URL 中,而 POST 的参数存储在请求体中。
/**GET方式**/
GET /test/demo_form.asp?name1=value1&name2=value2 HTTP/1.1

/**POST方式**/
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2

注意:

  • 但是不能因为 POST 参数存储在实体主体中就认为它的安全性高,因为照样可以通过一些抓包工具(如:Fiddler)查看。
  • 因为 URL 只支持 ASCII 码,因此 GET 中的参数如果存在中文等字符就需要先进行编码,在服务器进行解码。POST 请求支持标准字符集。

四、PUT

一般用于上传文件,由于 PUT 方法本身不带验证机制,任何人都可以上传文件,因此存在安全问题,一般我们不使用此方法。

PUT 和 POST 的最大区别是一个是幂等性的一个不是幂等性的。

五、PATCH

对资源进行部分修改,虽然 PUT 也可以用于修改资源,但是它只能完全替代原始资源,而 PATCH 可以允许对资源进行部分修改。

六、DELETE

删除文件,它与 PUT 的功能相反,一般用于删除文件,不带验证机制。不安全。

七、OPTIONS

查询指定 URL 能够支持的方法。会返回 *Allow:GET、POST、HEAD、OPTIONS *这样的内容。

八、CONNECT

要求使用隧道连接技术,要求在与代理服务器通信时建立隧道,使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

CONNECT cnn.com:443 HTTP/1.1

九、TRACE

路径追踪

服务器会将通信路径返回给客户端。发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器就会减 1,当数值为 0 时就会停止传输。通常不会使用 TRACE,并且它容易受到 XST 攻击(Cross-Site Tracing,跨站追踪)

其他概念

安全

安全的 HTTP 方法不会改变服务器的状态,也就是它只是可读的。

GET 方法是安全的(因为大部分情况下只用来获取数据),而 POST 方法不是的,因为 POST 的作用是传送实体主体的内容(用于增减删除修改数据库等),也就是服务器的状态发生了改变。

安全的方法除了 GET 之外还有:HEAD、OPTIONS(下面会说到)。

不安全的方法除了 POST 之外还有:PUT、DELETE。

幂等性

幂等性的 HTTP 方法,同样的请求被执行一次与连续执行多次的结果是一样的,服务器的状态也是一样的。

通常情况先 GET、HEAD、PUT 和 DELETE、OPTIONS 等方法都是幂等性的,而 POST 方法却不是。所有的安全方法都是幂等性的。

GET /pageX HTTP/1.1 是幂等的。连续调用多次,客户端接收到的结果都是一样的:

GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
POST /add_row HTTP/1.1 不是幂等的。如果调用多次,就会增加多行记录:
POST /add_row HTTP/1.1
POST /add_row HTTP/1.1   -> Adds a 2nd row
POST /add_row HTTP/1.1   -> Adds a 3rd row

DELETE /idX/delete HTTP/1.1 是幂等的,即便是不同请求之间接收到的状态码不一样:

DELETE /idX/delete HTTP/1.1   -> Returns 200 if idX exists
DELETE /idX/delete HTTP/1.1   -> Returns 404 as it just got deleted
DELETE /idX/delete HTTP/1.1   -> Returns 404

可缓存

请求报文的 HTTP 方法本身是可缓存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可缓存,POST 在多数情况下不可缓存的。

补充: 响应报文的状态码是可缓存的,包括:200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501。

响应报文的 Cache-Control 首部字段可以指定是否进行缓存。

XMLHttpRequest

XMLHttpRequest 是一个 API,它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过 URL 来获取数据的简单方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。XMLHttpRequest 在 AJAX 中被大量使用。

在使用 XMLHttpRequest 的 POST 方法时,浏览器会先发送 Header 再发送 Data。但并不是所有浏览器会这么做,例如火狐就不会。而 GET 方法 Header 和 Data 会一起发送。