小结
今天我们学习了 HTTP 报文里请求方法相关的知识,简单小结一下。
请求方法是客户端发出的、要求服务器执行的、对资源的一种操作;
请求方法是对服务器的“指示”,真正应如何处理由服务器来决定;
最常用的请求方法是 GET 和 POST,分别是获取数据和发送数据;
HEAD 方法是轻量级的 GET,用来获取资源的元信息;
PUT 基本上是 POST 的同义词,多用于更新数据;
“安全”与“幂等”是描述请求方法的两个重要属性,具有理论指导意义,可以帮助我们设计系统。
1、增:POST 删:DELETE 改:PUT 查:GET
请求头如何设计,这个问题。。。不太明白。
2、我认为可以,因为http协议具有很好的灵活性。具体的对资源操作是由服务器决定的。
总结:
Http/1.1规定了八种方法,单词必须都是大写的形式。
1. GET:获取资源,可以理解为读取或者下载数据
2. HEAD:获取资源的元信息;
3. POST:向资源提交数据,相当于写入或上传数据;
4. PUT:类似POST;
5. DELETE:删除资源;
6. CONNECT:建立特殊的连接隧道;
7. OPTIONS:列出可对资源实行的方法;
8. TRACE:追踪请求-响应的传输路径。
GET/HEAD
——从服务器获取资源
HEAD和GET类似,也是从服务器获取资源,但是不会返回请求的实体数据,只有响应头(元信息),是GET的简易版,如果不需要资源的话,可以避免传输body数据的浪费。
POST/PUT
——向服务器提交数据,数据在body里
PUT和POST作用类似,有微妙不同,通常POST标识新建,PUT标识修改
DELETE
——删除资源,危险性大,很少用
CONNECT
——要求服务器为客户端和另一台远程服务器建立一条特殊的链接,这时Web服务器充当代理的角色
OPTIONS
——要求服务器列出可对资源实行的操作方法,在响应头Allow字段里返回。功能有限,用处不大。Nginx没支持
TRACE
——用于对HTTP链路的测试或诊断,可以显示出请求 - 响应的传输路径。存在漏洞,会泄露网站的信息,所以通常也是禁止使用
安全与幂等
安全:在HTTP协议里,所谓的安全,是指请求方法不会对服务器上的资源造成实质的修改,so 只有GET和HEAD是安全的,因为是只读操作。
幂等:多次执行相同的操作,结果也都是相同的。so GET和HEAD 即是安全的也是幂等的,DELETE可以多次删除同一个资源,效果都是“资源不存在”,所以也是幂等。POST是新增或提交数据,多次提交会创建多个资源,所以不是幂等的。PUT是替换或更新数据,多次更新一个资源,资源还是第一次更新的状态。所以是幂等的。
幂等:GET、HEAD、DELETE、PUT
非幂等:POST
作者回复: 总结的非常好。
问题里的“请求头如何设计”,意思是说相关的curd参数应该放在什么地方,比如用query参数或者是字段,只是一个提示,不是要必须如何如何做。
问答
关于Post和Get之间的区别,我一直很困惑,因为其实我们也可以在Get的请求体里写参数,用Get去修改资源;或者在Post的请求头上去写参数,用它去获取资源。所以他们两者之间到底有什么区别呢?希望老师可以指教一下!
就是个使用的习惯和约定,就像是红绿灯,不是强制要求你必须遵守,但大家都按照这样做沟通起来顺畅。
要理解协议的含义,要求你遵守,但不强制。
老师有个问题想问一下,我之前用比较旧的http工具类发请求,使用get方法时不能使用请求体,但使用软件工具能使用请求体,不同方法对请求的格式要求是不是一样,还有就是不同方法的区别是不是体现在服务器的响应上,用post请求访问一张照片会是什么样的,暂时还没试过
**任何请求报文都可以带请求体,与方法无关,老的工具可能对协议支持的不好。**
后面你理解的对,请求方法最终如何处理还是要依赖于服务器,如果愿意,服务器也可以用get来上传数据,用post获取数据,现在的get/post都是依据协议标准来执行,所以是get获取post上传。