HTTP的常见方法

时间:2021-01-07 00:00:19

超文本传输协议(HTTP)用于客户端和服务器端之间的通信。

通过请求和响应来交换信息达成通信。请求必须由客户端发出,服务器端回复响应。

 

下面介绍HTTP中常见的方法:

 

1.GET:获取资源

从指定的资源(即被URI识别的资源)请求数据,指定的资源服务器解析后返回响应内容。请求服务器发送某个资源。

举例:

请求:     GET /index.html HTTP/1.1

               Host: www.hackr.jp

响应:     返回 index.html 的页面资源

 

请求:     GET /index.html HTTP/1.1

               Host: www.hackr.jp

               If-Modified-Since: Thu, 12 Jul 2012 07:30:00 GMT

响应:     仅返回2012年7月12日7点30分以后更新过的index.html页面资源。

               如果未有内容更新,则以状态码304 Not Modified作为响应返回


 
2.POST:传输实体主体

向指定的资源提交要被处理的数据。

GET方法强调资源的获取,POST方法强调资源的传输。

 

举例:

请求:     POST /submit.cgi HTTP/1.1

               Host: www.hackr.jp

               Content-Length: 1560(1560字节的数据)

响应:    返回 submit.cgi 接收数据的处理结果

 

3.PUT:传输文件

PUT 方法用来传输文件,要求在请求报文的主体中包含文件内容,然后保存到请求 URI 指定的位置。
但是,鉴于 HTTP/1.1 的 PUT 方法自身不带验证机制,任何人都可以上传文件 , 存在安全性问题,因此一般的 Web 网站不使用该方法。若配合 Web 应用程序的验证机制,或架构设计采用 REST(REpresentationalState Transfer,表征状态转移)标准的同类 Web 网站,就可能会开放使用 PUT 方法。

 

举例:

请求:     PUT /example.html HTTP/1.1

               Host: www.hackr.jp

               Content-Type: text/html

               Content-Length: 1560(1560 字节的数据)

响应:    响应返回状态码 204 No Content(比如:该html 已存在于服务器上)

 

POST与PUT比较:

这两个方法咋一看都可以更新资源,但是有本质区别的。

首先解释幂等,幂等是数学的一个用语,对于单个输入或者无输入的运算方法,如果每次都是同样的结果,则称其是幂等的。

对于两个参数,如果传入值相等,结果也等于每个传入值,则称其为幂等的,如max(a,b)

POST:

用于提交请求,可以更新或者创建资源,是非幂等的

举个例子,在我们的支付系统中,一个api的功能是创建收款金额二维码,它和金额相关,每个用户可以有多个二维码,如果连续调用则会创建新的二维码,这个时候就用POST。

PUT:

用于向指定的URI传送更新资源,是幂等的

还是那个例子,用户的账户二维码只和用户关联,而且是一一对应的关系,每次刷新账户的二维码都不变,此时这个api就可以用PUT。

 

4.HEAD:获得报文首部

HEAD 方法和 GET 方法行为类似,只是不返回报文主体部分,只返回首部。

这就允许客户端在未获取实际资源的情况下,对首部进行检查,确认URI的有效性及资源更新的日期时间等。

 

举例:

请求:     HEAD /index.html HTTP/1.1

               Host: www.hackr.jp

响应:    返回index.html有关的响应首部

 

5.DELETE:删除文件

DELETE方法用来删除文件,是与PUT相反的方法。DELETE方法就是请求服务器删除请求URI所指定的资源。

但是,HTTP/1.1 的 DELETE方法本身和PUT方法一样不带验证机制,所以一般的Web 网站也不使用DELETE方法。当配合Web应用程序的验证机制,或遵守 REST 标准时还是有可能会开放使用的。

 

举例:

请求:     DELETE /example.html HTTP/1.1

               Host: www.hackr.jp

响应:    响应返回状态码 204 No Content(比如:该 html 已从该服务器上删除)

 

6.OPTIONS:询问支持的方法

OPTIONS 方法请求服务器告知其支持的各种功能。可以用来查询针对请求 URI 指定的资源所支持的方法。

 

举例:

请求:      OPTIONS * HTTP/1.1

                Host: www.hackr.jp

响应:      HTTP/1.1 200 OK

                Allow: GET, POST, HEAD,

                OPTIONS(返回服务器支持的方法)

 

 7.TRACE:追踪路径

TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方法。

客户端发起一个请求时,这个请求可能要穿过防火墙、代理、网关或其他一些应用程序。每个中间节点都可能修改原始HTTP请求,TRACE允许客户端在最终将请求发送给服务器时,查询发送出去的请求是怎样被加工修改 / 篡改的。

但是,TRACE 方法本来就不怎么常用,再加上它容易引发 XST(Cross-Site Tracing,跨站追踪)攻击,通常就更不会用到了。

 

举例:

请求:     TRACE / HTTP/1.1

               Host: hackr.jp

               Max-Forwards: 2

响应:     HTTP/1.1 200 OK

               Content-Type: message/http

               Content-Length: 1024

               TRACE / HTTP/1.1

               Host: hackr.jp

               Max-Forwards: 2(返回响应包含请求内容)

 

8.CONNECT:要求用隧道协议连接代理

CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信。

主要使用SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

 

CONNECT 方法的格式如下所示:

CONNECT    代理服务器名:端口号     HTTP版本

 

举例:

请求:     CONNECT proxy.hackr.jp:8080

               HTTP/1.1

               Host: proxy.hackr.jp

响应:     HTTP/1.1 200 OK(之后进入网络隧道)