08 请求方法

Posted by CodingWithAlice on April 21, 2021

08 请求方法

  • 总结

    1、请求方法是客户端发出的、要求 服务器执行 的、对资源的一种操作

    2、请求方法是对服务器的【指示】,真正应如何处理 由服务器来决定

    3、最常用的请求方法是 GETPOST,分别是获取数据和发送数据

    4、HEAD 方法是 轻量级的 GET,用来获取资源的元信息(响应头)

    5、PUT 基本上是 POST 的同义词,多用于更新数据

    6、安全幂等 是描述请求方法的两个 重要属性,具有理论指导意义,可以帮助我们设计系统

  • 标准请求方法

    目前 HTTP/1.1 规定了八种方法,常用的前四个【单词都 必须是大写 的形式】:

    1、GET:获取资源,可以理解为读取或者下载数据

    2、HEAD:获取 资源的元信息(响应头)

    3、POST:向资源提交数据,相当于写入或上传数据

    4、PUT:类似 POST

    5、DELETE:删除资源

    6、CONNECT:建立特殊的连接隧道

    7、OPTIONS:列出可对资源实行的方法

    8、TRACE:追踪请求 - 响应的传输路径

GET - 从服务器获取资源

搭配 URI 和其他头字段就能实现对资源更精细的操作,例如:

  • URI 后使用 #,就可以在获取页面后直接定位到某个标签所在的位置
  • 使用 If-Modified-Since 字段就变成了有条件的请求,仅当资源被修改时才会执行获取动作
  • 使用 Range 字段就是范围请求,只获取资源的 一部分数据

HEAD - 请求从服务器获取元信息

请求从服务器获取资源,但服务器 不会返回请求的实体数据,只会传回响应头,也就是资源的元信息

使用场景:

  • 想要 检查一个文件是否存在,只要发个 HEAD 请求就可以了,没有必要用 GET 把整个文件都取下来
  • 要检查文件 是否有最新版本,同样也应该用 HEAD,服务器会在响应头里把文件的修改时间传回来

POST/PUT - 提交数据

都是向 URI 指定的资源提交数据,数据就放在报文的 body 里

通常 POST 表示的是 新建 - create的含义,而 PUT 则是 修改 - update的含义

因为它与 POST 的语义、功能太过近似,有的服务器甚至就直接禁止使用 PUT 方法,只用 POST 方法上传数据

其他方法

  • DELETE方法

    指示服务器 删除资源,因为这个动作危险性太大,所以通常服务器不会执行真正的删除操作,而是对资源做一个删除标记。当然,更多的时候服务器就直接不处理 DELETE 请求。

  • CONNECT

    是一个比较特殊的方法,要求服务器为客户端和另一台远程服务器建立一条特殊的连接隧道,这时 Web 服务器在中间充当了代理的角色

  • OPTIONS方法

    要求服务器列出可对资源实行的操作方法,在响应头的 Allow 字段里返回。它的功能很有限,用处也不大,有的服务器(例如 Nginx)干脆就没有实现对它的支持。

  • TRACE方法

    多用于对 HTTP 链路的测试或诊断,可以显示出请求 - 响应的传输路径。它的本意是好的,但存在漏洞,会泄漏网站的信息,所以 Web 服务器通常也是禁止使用。

安全与幂等 - 重要属性

在 HTTP 协议里,

  • 安全:指请求方法 不会“破坏”服务器上的资源,即不会对服务器上的资源造成实质的修改
  • 幂等:意思是 多次执行相同的操作,结果也都是相同的,即多次“幂”后结果“相等”
方法 安全 幂等
GET/HEAD
POST
PUT
DELETE