get和post请求的区别

99 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,

1.post 方法比 get 方法安全?

按照网上大部分文章的解释,post 比 get 安全,因为数据在地址栏上不可见。
然而从传输的角度来说,他们都是不安全的,因为 http 在网络上是明文传输,只要在网络节点上抓包,就能完整地获取数据报文。
要想安全传输,就只有加密,也就是 https。

2.传输数据的大小

get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)。 post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。

3.get 方法参数写法是固定的吗?

在约定中,一般我们的参数是写在 ? 后面,用 & 分割。 我们知道,解析报文的过程是通过获取 TCP 数据,用正则等工具从数据中获取 Header 和 Body,从而提取参数。 也就是说,我们可以自己约定参数的写法,只要服务端能够解释出来就行,一种比较流行的写法是这样 : www.juejin.cn/user/name/y…

4.缓存性和后退页面的反应

get请求是可以缓存的。 post请求不可以缓存。

get请求页面后退时,不产生影响。 post请求页面后退时,会重新提交请求。

5.数据包

get产生一个TCP数据包;POST产生两个TCP数据包。对于get方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

6.报文上的区别

get 和 post 只是 HTTP 协议中两种请求方式,所以在传输上,没有区别,因为HTTP 协议是基于 TCP/IP 的应用层协议 报文格式上,不带参数时,最大区别仅仅是第一行方法名不同,一个是get,一个是post 带参数时报文的区别呢?在约定中,get 方法的参数应该放在 url 中,post 方法参数应该放在 body 中 举个例子,如果参数是 name=qiming.c, age=22。 get 方法简约版报文可能是这样的 get /index.php?name=qiming.c&age=22 HTTP/1.1 Host: localhost

post 方法简约版报文可能是这样的。 post /index.php HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded name=qiming. c&age=22

7.传输数据的大小

get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大). post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。