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
申请。
我是少侠露飞。爱技术,爱分享。