乐趣区

关于https:网络协议彻底弄清POST和GET请求的区别这次你GET了么

1 引言

我想大家在面试中应该常常有被问到 POST 和 GET 申请的区别,很多人都会答复诸如 POST 比 GET 平安,GET 比 POST 传输的长度要少之类的,然而,这会是面试官想要的答案么?这样的答复听下来不免像是囫囵吞枣的背诵下来的,并且就算是背,多少也得晓得一下原理呀。明天,少侠就带着问题和大家一起看看 POST 和 GET 申请的区别。

2 HTTP 协定

2.1 HTTP 协定的特点

首先,咱们应该晓得,无论是 POST 还是 GET 申请,都是基于 超文本传输协定 HTTP)的,而 HTTP 协定是 TCP/IP 协定族的应用层协定。
HTTP 协定客户端申请 request 音讯包含以下格局: 申请行(request line)、申请头部(header)、空行、申请数据

服务端响应 response 也由四个局部组成,别离是:响应行、响应头、空行、响应体

2.2 申请办法

HTTP 协定定义了多种申请形式,具体如下:
GET获取资源 ,用来申请拜访已被 URI(对立资源标志符,和 URL 是蕴含和被蕴含的关系)辨认的资源。
POST:用来 传输实体的主体 ,尽管 GET 也能够实现,然而个别不必。
PUT 传输文件 。然而鉴于 PUT 办法本身不带验证机制,任何人都能够上传文件,存在安全性问题,因而个别网站都不采纳该办法。
HEAD: 取得报文首部 。和 GET 申请一样,只是不返回报文主体局部。
DELETE 删除文件 。同样不带验证机制,存在安全性问题。
OPTIONS: 询问指定的申请 URI 反对哪些办法
TRACE: 追踪门路 ,让 Web 服务器将之前的申请通信环回给客户端的办法。
CONNECT:要求在 与代理服务器通信时建设隧道,实现隧道协定进行 TCP 通信。

3 POST 和 GET 申请区别的常见误区

3.1 申请参数长度限度:GET 申请长度最多 1024kb,POST 对申请数据没有限度

对于此点,在 HTTP 协定中没有对 URL 长度进行限度,这个限度是 不同的浏览器及服务器 因为有不同的标准而带来的限度。

3.2 GET 申请肯定不能用 request body 传输数据

GET能够带 request body,但不能保障肯定能被接管到。如果你用 GET 服务,在 request body 偷偷藏了数据,不同服务器的解决形式也是不同的,有些服务器会帮你读出数据,有些服务器间接疏忽。

3.3 POST 比 GET 安全性要高

这里的平安是相对性,通过 GET 提交的数据都将显示到 URL 上,页面会被浏览器缓存,其他人查看历史记录会看到提交的数据,而 POST 不会。另外 GET 提交数据还可能会造成 CSRF 攻打。

3.4 GET 产生一个 TCP 数据包,POST 产生两个 TCP 数据包

对于 GET 形式的申请,浏览器会把 http header 和 data 一并发送进来,服务器响应 200 OK(返回数据);
而对于 POST,浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 OK(返回数据)。留神,只管 POST 申请会分两次,但 body 是紧随在 header 前面发送的,基本不存在『期待服务器响应』一说

4 POST 和 GET 申请的区别小结

申请参数 :GET 申请参数是通过 URL 传递的,多个参数以 & 连贯,POST 申请放在 request body 中。
申请缓存 :GET 申请会被缓存,而 POST 申请不会,除非手动设置。
珍藏为书签 :GET 申请反对,POST 申请不反对。
安全性 :POST 比 GET 平安,GET 申请在浏览器回退时是有害的,而 POST 会再次申请。
历史记录 :GET 申请参数会被残缺保留在浏览历史记录里,而 POST 中的参数不会被保留。
编码方式 :GET 申请只能进行 url 编码,而 POST 反对多种编码方式。
对参数的数据类型:GET 只承受 ASCII 字符,而 POST 没有限度。

这里还想补充阐明一点,就是通过浏览器地址栏输出 URL 拜访资源的形式都是 GET 申请。

我是少侠露飞。爱技术,爱分享。

退出移动版