POST与GET的区别
说到GET和POST,就不得不提HTTP协议,因为浏览器和服务器的交互是通过HTTP协议执行的,而GET和POST也是HTTP协议中的两种方法。
HTTP的工作方式是客户端与服务器之间的请求-应答协议。
HTTP 底层是 TCP/IP,所以 GET 和 POST 的底层也是 TCP/IP。
HTTP协议中定义了浏览器和服务器进行交互的不同方法,基本方法有4种,分别是GET,POST,PUT,DELETE。这四种方法可以理解为,对服务器资源的查,改,增,删。
GET:从服务器上获取数据,也就是所谓的查,仅仅是获取服务器资源,不进行修改。
POST:向服务器提交数据,这就涉及到了数据的更新,也就是更改服务器的数据。
PUT:PUT的英文含义是放置,也就是向服务器新添加数据,就是所谓的增。
DELETE:从字面意思也能看出,这种方式就是删除服务器数据的过程。
其中GET与POST是常用的,也是最容易被问到的。
GET与POST区别:
【注意】HTTP没有要求,如果Method 是POST,数据就要放在BODY中。也没有要求 Method 是GET,数据就一定放在 URL 中而不能放在 BODY中。
区别一:
- GET 参数是通过 URL 传递
- POST 放在 request body中
下面用生动形象的例子来说明 GET 和 POST 之间的区别。
在万维网的世界中,TCP就像是汽车,我们用TCP 来运输数据,它很可靠,从来不会发生丢件少见的现象。但是,如果路跑的全部是看起来一模一样的汽车,那么送急件的汽车可能被前面的汽车堵在了路上,导致急件不能运输到目的地。为了避免这种情况发生,交通规则 HTTP 诞生。HTTP 给汽车分类了,设定了几个不同的服务级别,有 GET 、POST、PUT、DELETE等。
- HTTP规定,当执行 GET 请求的时候,要给汽车贴上 GET 标签,而且要求把传送的数据放在车顶上(URL中)(统一资源定位符(URL,英语Uniform Resource Locator的缩写)也被称为网页地址,)。
- 当执行POST请求的时候,要给汽车上贴上POST标签,并把货物放在车厢里。
=============================================
区别二:
但是我们在运输过程中,是对运输量有限制的(参数的大小)
在万维网的世界中,还有另一个角色:运输公司。不同的浏览器(发起http请求)和服务器(接收http请求)就是不同的运输公司。理论上,你可以在车顶上无限的放货物(url中无限加入参数)。但是运输公司可不傻,装货和卸货都会花费很大的成本,(大多数)浏览器通常会限制URL长度为 2K 个字节,(大多数)服务器最多处理 64K 大小的url。超过的部分,不会处理。
- 因为URL的长度限制,GET方式传输的数据大小有所限制,传送的数据量不超过2KB。
- POST方式传送的数据量比较大,一般被默认为没有限制,但是根据IIS的配置,传输量也是不同的。
==============================================
区别三:
GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包。
- 对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送过去,服务器响应 200(返回数据)
- 对于 POST 方式的请求,浏览器会先发送 header,服务器响应 100(continue),浏览器再发送data,服务器响应ok(返回数据)
===============================================
区别四:
- get 比post 更不安全,因为参数直接暴露在 URL 中,所以不能用来传递敏感信息(因为传输的数据会显示在请求的URL中)。
- POST方式传输的数据安全性较高,因为数据传输不是明显显示的。
小总结:
POST和GET方式的安全性是相对的,另外也要看是从哪个角度来看的。从数据传输过程方面来看,POST方式是更加安全的,但是从对服务器数据的操作来看,POST方式的安全性又是比较低的。即使是传输过程用POST来执行,安全性也是相对的,如果了解HTTP协议漏洞,通过拦截发送的数据包,同样可以修改交互数据,所以这里的安全不是绝对的。
感谢并参考:
https://blog.csdn.net/xiaojie_570/article/details/87296715
https://blog.csdn.net/wswit/article/details/50776060?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase