前言
今天看了一会SpringMVC相关内容,然后又看了看自己以前的文章,发现了很多的不足,决定更新一些SpringMVC的内容。
本文为作者私人笔记记录,如有不足望大家看到后及时提醒哟。**如需转载,请注明出处!**谢谢!
请求方式
众所周知,我们常用的请求大致分为两种,分别为GET请求和POST请求。
这也是面试时经常问道的问题。下面我将从多个方面阐述他们的区别。
安全性
很多小伙伴在听到询问两种请求的区别是,第一反应一定是GET请求安全,POST请求不安全。
因为form表单在传输GET请求数据时,会将参数拼接到URL地址后,以键值对的形式拼接显示。POST请求时会将参数放进请求体中。
所有看上去,GET请求能看到参数,POST看不到,因此GET请求不安全,POST安全。
这种认知不能说错,但是不够严谨,如果加上相对两个字会更好一点。
如果真要深入一点,POST请求抓包后,其实也能看到请求体中的参数,安全性就有待考究了。
而且,其实,GET请求也不是说就只能在URL上显示,这里有一个参考文章,可以看看。GET请求和POST请求的区别
数据量
数据量的不同是我们第二个“常识”,GET请求因为它写在URL上,因此会受限不能太大,而POST请求在请求体中,则没有限制,可以很大。
这句话其实也是有问题的。
第一:在HTTP规范中并没有对URL的长度和传输的数据大小进行限制,只是由于浏览器和服务器均对URL的长度进行了限制,才会有大小限制。
第二:POST请求,由于数据放在请求体中,理论上不会受到限制,但是各个服务器也会对POST的数据大小进行一定的限制。如图片等。
因此,数据量方面大家的常识也没有错,不过也需要加上相对二字,才能更加的严谨。POST请求传输数据量相对GET请求要大一些。
缓存
GET请求是有缓存问题的,可能你发送多次GET请求,第一次是返回200,后面的则发返回304,当然这也不是绝对的,可能也会一直返回200,或其他情况。
POST请求则是新增、修改等操作。则不会有缓存问题。
编码
GET请求一般都是URL编码。
POST请求一般有application/x-www-form-urlencoded(form默认)、multipart/form-data(文件上传)和application/json(json)三种传输方式。
TCP
GET会产生一个TCP数据包,POST会产生两个TCP数据包。
GET会发送http header和data给服务端,服务端返回一个200,请求成功。
POST会先发送http header给服务端,告诉服务端等一下会有数据过来,服务端返回100,告诉客户端我已经准备接收数据,POST在发送一个data给服务端,服务端返回200,请求成功。
RESTful
RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。
RESTFUL特点包括:
1、每一个URI代表1种资源;
2、客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
3、通过操作资源的表现形式来操作资源;
4、资源的表现形式是XML或者HTML;
5、客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。
在RESTful中请求方式就不止GET和POST了,感兴趣的可以多了解一下它的代码实现,此处就不详述。这种方式的使用还是的看公司架构选型,不一定每个公司都会用到。
参考
本文参考了如下文章,大家也可以看看,挺不错的。
https://zhuanlan.zhihu.com/p/151440663