前端当中,get和post大家都不会陌生,经常遇见。
但是当被问到二者的区别时,很多都只能简单的说几点,今天就让我们来彻底搞明白。
首先,我们先看下面这张图:
从标准上来看,GET 和 POST 的区别如下:
GET 用于获取信息,是无副作用的,且可缓存,通过URL传递参数;
POST 用于修改服务器上的数据,有副作用,不可缓存,参数放在request body中。
GET和POST本质上就是T C P 链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
GET、POST 请求报文上的区别:
GET 和 POST 只是 HTTP 协议中两种请求方式(异曲同工),而 HTTP 协议是基于 TCP/IP 的应用层协议,无论 GET 还是 POST,用的都是同一个传输层协议,所以在传输上,没有区别。
说到请求报文,本人是有点懵的,于是参考了各位大佬的文章之后,总结如下:
HTTP请求报文:
HTTP请求报文主要由请求行、请求头、请求体组成
1.请求行
由3部分组成,分别为:请求方法、URL以及协议版本,之间由空格分隔。
请求方法包括GET、HEAD、PUT、POST、TRACE(追溯)、OPTIONS、DELETE以及扩展方法,当然并不是所有的服务器都实现了所有的方法,部分方法即便支持,处于安全性的考虑也是不可用的。
协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1
2.请求头
HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者 POST)
常见的请求头字段含义:
Accept: 浏览器可接受的MIME类型。
Accept-Charset:浏览器可接受的字符集。
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
Content-Length:表示请求消息正文的长度。
Host: 客户机通过这个头告诉服务器,想访问的主机名。Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
Cookie:客户机通过这个头可以向服务器带数据,这是最重要的请求头信息之一。
请求头部的最后会有一个空行,表示请求头部结束,接下来为请求正文,这一行非常重要,必不可少。
3.请求体
若方法字段是GET,则此项为空,没有数据
若方法字段是POST,则通常来说此处放置的就是要提交的数据。
比如要使用POST方法提交一个表单,其中有user字段中数据为“admin”, password字段为123456,那么这里的请求数据就是 user=admin&password=123456,使用&来连接各个字段。
总的来说,HTTP请求报文格式就如下图所示: