Visit my LeetCode

GET 和 POST

两种 HTTP 请求方法:GET 和 POST

在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。

主要区别:

GET - 从指定的资源请求数据。
POST - 向指定的资源提交要被处理的数据。
1、	Get 是用来从服务器上获得数据
 	Post 是用来向服务器上传递数据。
2、	Get 将表单中数据的按照 variable=value 的形式,添加到 action 所指向的 URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;
	Post 是将表单中的数据放在 form 的数据体中,按照变量和值相对应的方式,传递到 action 所指向 URL。
3、	Get 是相对不安全的,因为在传输过程,数据被放在请求的 URL 中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。
4、	Get 传输的数据量小,这主要是因为受 URL 长度限制;而
	Post 可以传输大量的数据,所以在上传文件只能使用 Post(当然还有一个原因,将在后面的提到)。
5、	Get 限制 Form 表单的数据集的值必须为 ASCII 字符
	Post 支持整个 ISO10646 字符集。
6、Get 是 Form 的默认方法。 
	使用 Post 传输的数据,可以通过设置编码的方式正确转化中文;而 Get 传输的数据却没有变化。

对post与get区别的错误理解:

1. get安全性非常低,post安全性较高×

这个看法,只是相对的安全,就比如让我的爸爸妈妈来看,那肯定post更安全,但要是让一个资深的安全工程师来说,那本质就是TCP的链接,并无差别。

你们以为的get不安全,是因为在地址栏能看见自己所提交的数据?而post却看不见,所以post比get安全? no no no 这样想你就大错特错了,来看图!!

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据),下图:
0000
好像确实是啊,自己提交的信息名字什么的都在地址栏,那么你再看一下下图的POST提交数据。

对于POST,浏览器先发送header,服务器响应100(continue),然后再发送data,服务器响应200(返回数据),下图:
在这里插入图片描述
有没有发现它写的更详细呢?哈哈?还给你排个版!!!确实,相比之下,post方法提交的数据一般人不会发现,所以GET确实差了那么一丢丢。

然而,从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文,要想安全传输,就只有加密,也就是 HTTPS

2. POST一定要放到请求体里面,GET就一定要放到URL里面 ××

GET和POST是由HTTP协议定义的。那么使用哪个方式与应用层的数据如何传输是没有相互关系的。从而,HTTP就没有要求,POST一定要放到请求体里面,GET就一定要放到URL里面。

在HTML标准中,是有着类似的定义。但这只是HTML标准对HTTP协议的用法的约定。也就是规范上说,无区别。

那么,这个说法是从何而来的呢?是因为有各种浏览器等软件的实现,就变成了我们现在熟知的现象,GET要用URL传参,POST用body传参。

3. HTTP协议对GET和POST有没有对长度的限制??

HTTP协议明确地指出了,HTTP请求头和请求体都没有长度的要求。

而对于URL长度上的限制,有两方面的原因造成:

1、浏览器。

据说IE对URL长度会限制在2048个字符内。但是就我所知,firefox是支持10W以上的长度。

2、服务器。

服务器处理超长的URL本身就是一种负担,更何况遭受恶意攻击呢?

因此,多数服务器出于安全、稳定等多方面的考虑,会给URL长度加限制。但是这个限制是针对所有HTTP请求的,与GET、POST没有关系。

posted @ 2021-05-18 16:11  Dqarden  阅读(70)  评论(0编辑  收藏  举报