post和get请求的区别

前端当中,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请求报文格式就如下图所示:

你可能感兴趣的:(post和get请求的区别)