HTTP 方法

HTTP 方法

以下介绍 HTTP 1.1 中可使用的方法:

  • GET: 获取资源
  • POST: 传输实体主体(可理解为添加记录
  • PUT: 传输文件(或更新记录
  • DELETE: 删除文件(或删除记录
  • HEAD: 获取报文首部
  • OPTIONS: 询问支持的方法
  • TRACE: 追踪路径(不常用
  • CONNECT: 要求用隧道协议链接代理

GET: 获取资源

GET 方法用来请求已被 URI 识别的资源。(即请求已有资源)指定的资源经服务器端解析后返回响应内容。

如用 GET 方法:

请求 GET /index.html HTTP/1.1
Host: www.xxx.com
响应 返回 index.html 的页面资源
请求 GET /index.html HTTP/1.1
Host: www.xxx.com
If-Modified-Since: Thu, 12 Jul 2012 07:30:00 GMT
响应 仅返回 2012 年 7月12日7点30分以后更新过的 index.html 页面资源。
如果未有内容更新,则以状态码 304 Not Modfied 作为响应返回

GET 方法是 幂等 且 安全 的。

POST: 传输实体主体,新增记录

或者可理解为在数据库中添加一条记录

虽然用 GET 方法可以传输实体的主体,但一般不用 GET 方法进行传输,而是用 POST 方法。POST 和 GET 的功能虽然相似,但 POST 的主要目的并不是获取响应的主体内容。

如:

请求 POST /submit HTTP/1.1
Host: www.xxx.com
Content-Length: 16
Content-Type: application/x-www-form-urlencoded

name=xxxx&age=20
响应 返回 /submit 接收数据的处理结果

POST 方法是 不幂等 且 不安全 的。

GET 与 POST 的不同

GET:

  • 参数在 url 中携带,用 ? 携带,& 分割;url 在不同浏览器有不同的长度限制
  • 浏览器会主动缓存 GET 方法,若下次请求一致,会返回缓存内容
  • GET 安全且幂等

POST:

  • 参数在 请求体 中携带,请求信息没有长度限制;

    相对于 GET 而言安全,但是可以被抓包

  • POST 不安全且不幂等

PUT: 传输文件,更新记录

PUT 方法用于传输文件或更新记录。要求在请求报文主体中包含主体内容,然后保存到请求 URI 的位置

例子:

请求 PUT /index.html HTTP/1.1
Host: www.xxx.com
Content-Type: text/html
Content-Length: 1560
响应 响应返回状态码 204 No Content(该 html 已存在服务器上)

PUT 方法 不安全 但 幂等

HEAD: 获取报文首部

HEAD 方法和 GET 方法一样,只是不返回报文主体部分。用于确认 URI 的有效性及资源更新的日期时间等。

例子:

请求 HEAD /index.html HTTP/1.1
Host: www.xxx.com
响应 返回 index.html 有关的响应首部

HEAD 方法 安全 且 幂等

DELETE: 删除资源或记录

DELETE 方法可按指定请求 URI 删除指定资源或记录

请求 DELETE /index.html HTTP/1.1
Host: www.xxx.com
响应 响应返回状态码 204 No Content(该 html 已从服务器删除)

DELETE 方法 不安全 但 幂等

OPTIONS: 询问支持的方法

OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法

请求 OPTIONS * HTTP/1.1
Host: www.xxx.com
响应 HTTP/1.1 200 OK
Allow: GET, POST, HEAD, OPTIONS
(返回服务器支持的方法)

该请求方法的响应不能缓存。

如果该URI是一个星号(“*”),OPTIONS请求将试图应用于服务器,而不是某个指定资源。由于服务器的通信选项通常依赖于资源,所以此“*”请求只能作为“ping”或者“no-op”方法;或者用来测试服务器的性能。例如,用来测试HTTP/1.1代理。
如果该URI不是星号,则只能用来获取该资源通信中可用的选项。

OPTIONS请求方法的主要用途有两个:

  1. 获取服务器支持的HTTP请求方法;也是黑客经常使用的方法。
  2. 用来检查服务器的性能。例如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。

TRACE: 追踪路径

不常用。

TRACE 方法让 web 服务器端将之前的请求通信返回给客户端

发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器端就将该数字减1,当数值刚好减到0时,就停止继续传输,最后接收到请求的服务器则返回状态码 200 OK 的响应

客户端通过 TRACE 可以查询发送出去的请求时如何被加工修改的,因为请求连接到源服务器可能会通过代理中转,TRACE 方法就是用来确认连接过程中发生的一系列操作。

但是,TRACE 方法不常用,出于安全考虑,它容易引发 XST(Cross-Site Tracing,跨站追踪)攻击,就更不会用到

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

CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信。主要是用 SSL 和 TLS 协议把通信内容加密后经网络隧道传输。

请求 CONNECT proxy.xxx.com:8080 HTTP/1.1
Host: www.xxx.com
响应 HTTP/1.1 200 OK(之后进入网络隧道)

安全性 和 幂等性

安全性

指方法的多次调用不会产生副作用,即不会改变资源状态,并不是传统意义上的“安全”。

即,安全的方法不会修改资源状态,尽管多次调用的返回值可能不一样(被其他非安全方法修改过)。

幂等性

多次调用该方法产生的结果一致,客户端可以重复调用并且期望同样的结果。

如:

POST 和 PUT,一个 不幂等,一个 幂等。

原因是 POST 方法指定的 URL 请求体中为待添加的资源;PUT 方法是在 URL 直接指定修改的资源

重复提交POST请求可能产生两个不同的资源,而重复提交PUT请求只会对其URL中指定的资源起作用,也就是只会创建一个资源。

方法名 安全性 幂等性
GET
POST
PUT
DELETE
HEAD
OPTIONS

你可能感兴趣的:(网络协议)