背景
HTTP协议设计时是要构建一个超链接文档系统,通过URI来定位这些文档;在协议中要操作这些资源需要【某种动作的指使】告知这些资源的方式;
【请求方法】就这么诞生了;
【请求方法】可以这么理解,就是客户端发送了一个指令,要求服务端对URI对应的资源执行这个操作;
请求方法分类
共8种,单词都是大写的
- GET:获取资源
- HEAD:获取资源的元信息
- POST:向资源提交数据,相当于上传数据
- PUT:和POST很像
- DELETE:删除资源
- CONNECT:建立特殊的连接通道
- OPTIONS:列出可对资源实行的方法
- TRACE:追踪请求-响应的传输路径
其中常用的是 GET、POST、HEAD、PUT
GET/HEAD
GET
GET方法从HTTP/0.9 版本出现一直保存至今,也是里面最知名的方法了,是我们日常工作中使用很频繁的方法;
作用
从服务器中获取资源,该【资源】可以是静态的文本、图片、视频也可以是由PHP、Java动态生成的页面;
HEAD
作用与GET很相似,从服务器获取资源;
服务器对于HEAD方法的请求处理机制时一样,但是有一点,是不会返回实体数据,只会返回响应头,也就是资源对应的【元信息】
用于并不需要资源的场合,避免传输body数据的浪费
example
- 想要检查一个文件是否存在,只要发个HEAD请求就可以,没必要使用GET请求把整个文件都获取下来;
- 要检查文件是否有最新版本,同样也应该使用HEAD,服务器会把文件的修改时间在响应头中回传回来;
POST/PUT
GET/HEAD都是从服务器中获取数据,而POST/PUT则与其相反是往指定的URI资源中提交数据,提交的数据都是放在报文的body中;
POST
通常POST表示的是“新建”create的含义
PUT
PUT是【修改】【update】的含义
在实际应用中,PUT用到很少,并且它与POST在语义以及功能上都是太相近了,在有的服务器中直接禁止使用PUT方法,只使用POST方法进行数据的上传;
安全与幂等
安全
是指请求方法不会【破坏】服务器上的资源,也就是不会对服务器上的资源造成实质的修改
按照这个规定【GET/HEAD】方法是安全,因为这哥俩是【只读】操作;
而【POST/PUT/DELETE】操作会修改服务器上资源,所以是【不安全】
幂等
大概意思就是 多次执行相同操作,结果也都是相同的,
这么看【GET/HEAD】即是安全也是幂等的;
DELETE可以多次删除同一个资源,效果都是资源不存在了,也是幂等的;
对于POST来说,每一次POST都是会创建一个资源,所以不是幂等
而对于PUT来说,每一次PUT都是更新一下对应资源,所以是幂等的;
网友评论