作者:IPIDEA
2020-09-26 16:10:06
1、GET
功能:GET 方法用于获取由 Request-URI 所标识的资源的信息
默认方法:GET方法是默认的HTTP请求方法,例如当我们通过在浏览器的地址栏中直接输入网址的方式去访问网页的时候,浏览器采用的就是 GET 方法向服务器获取资源。
使用GET方法来提交表单数据存在的问题?
GET方法提交的表单数据只经过了简单的编码,存在着安全隐患。
提交的数据量不能太,这是因为浏览器对URL的长度有允许访问公开数据,而提交的数据是作为URL请求的一部分。
该方法的响应是可缓存的
请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的
GET 请求可被缓存:chrome下和firefox下如果检测到get请求的是静态资源,则会缓存,如果是数据,则不缓存GET 请求保留在浏览器历史记录中,可被收藏为书签,不应在处理敏感数据时使用,有长度允许访问公开数据 ,大多数浏览器通常都会允许访问公开数据url长度在2K个字节,只应当用于取回数据,只接受ASCII字符的参数的数据类型。
2、POST
功能:GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大防止账号关联的数据,克服了GET方法中的信息无法保密和数据量太小的缺点。该方法的响应是不可缓存的,除非响应里有合适的Cache-Control或者Expires头域。
查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的
POST 请求不会被缓存,不会保留在浏览器历史记录中,不能被收藏为书签,对数据长度没有要求,支持多种编码方式,包含更多的请求头,不能进行管道化传输。
3、为什么get比post效率高
重要原因: post在真正接受数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据。
3.1 post 请求过程
浏览器请求tcp连接(第一次握手)
服务器答应进行tcp连接(第二次握手)
浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
服务器返回100 continue响应
浏览器开始发送数据
服务器返回200 ok响应
3.2 get 请求过程
浏览器请求tcp连接(第一次握手)
服务器答应进行tcp连接(第二次握手)
浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
服务器返回200 ok响应
4、DELETE
功能:DELETE方法请求源服务器删除请求URI指定的资源
该方法的响应是不能被缓存的
5、PATCH
功能:用来更新局部资源
区分于PUT:PATCH方法是新引入的,是对PUT方法的补充,用来对已知资源进行局部更新。put虽然也是更新资源,但要求前端提供的一定是一个完整的资源对象
6、get和post的区别
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度允许访问公开数据的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有允许访问公开数据。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
GET和POST还有一个重大区别简单的说:GET产生一个TCP数据包;POST产生两个TCP数据包。
复杂的说:对于GET方式的请求,浏览器会把http header和data****一并发送出去,服务器响应200(返回数据)
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)
也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。
因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET全球住宅IP,高效采集公开数据POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?
GET与POST都有自己的语义,不能随便混用。
据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。