超文本传输协议(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(之后进入网络隧道)