08 请求方法
-
总结
1、请求方法是客户端发出的、要求 服务器执行 的、对资源的一种操作
2、请求方法是对服务器的【指示】,真正应如何处理 由服务器来决定
3、最常用的请求方法是
GET
和POST
,分别是获取数据和发送数据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 | ❌ | ✅ |