HTTP中GET和POST两种基本请求方法的区别

4,404 阅读5分钟

什么是通信协议?

通信协议是对计算机必须遵守的规则的描述,只有遵守这些规则,计算机之间才能进行通信。TCP/IP 是不同的通信协议的大集合。HTTP协议只是其中一种。

什么是 HTTP?

超文本传输协议(Hypertext Transfer Protocol,缩写 HTTP)旨在启用客户端和服务器之间的通信。

HTTP协议的职责

  • HTTP 负责 web 服务器与 web 浏览器之间的通信。

  • HTTP 用于从 web 客户端(浏览器)向 web 服务器发送请求,并从 web 服务器向 web 客户端返回内容(网页)。

GET和POST方法的相同点和区别

面试常常会问:GET 和 POST 方法的区别是什么? 这导致我们只关注它们之间的差异,而忽略了它们之间的共性,下面就一起看看俩个方法之间到底有啥异同。

HTTP的方法

方法描述
GET用于从指定资源请求数据
POST用于将数据发送到服务器来创建/更新资源
PUT用于将数据发送到服务器来创建/更新资源 ,POST 和 PUT之间的区别在于 PUT 请求是幂等的(idempotent)。也就是说,多次调用相同的 PUT 请求将始终产生相同的结果。相反,重复调用POST请求具有多次创建相同资源的副作用。
HEAD本质和get一样,但是响应中没有呈现数据,而是http的头信息,主要用来检查资源或超链接的有效性或是否可以可达、检查网页是否被串改或更新,获取头信息等,特别适用在有限的速度和带宽下。
DELETE删除指定的资源
OPTIONS获取http服务器支持的http请求方法,允许客户端查看服务器的性能,比如ajax跨域时的预检等。
CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。就是把服务器作为跳板,去访问其他网页然后把数据返回回来,连接成功后,就可以正常的get、post了。
TRACE回显服务器收到的请求,主要用于测试或诊断。一般禁用,防止被恶意攻击或盗取信息

GET和POST不同点

  • GET在浏览器回退时是无害的,而POST会再次提交请求。  

  • GET产生的URL地址可以被书签收藏,而POST不可以。  

  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。 

  • GET请求只能进行url编码(application/x-www-form-urlencoded),而POST支持多种编码方式 (application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多种编码。)。

  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

  • GET请求在URL中传送的参数是有长度限制的(因为浏览器对URL的长度有限制,最大长度是 2048 个字符),而POST没有。

  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制(允许二进制数据)。  

  • GET参数通过URL传递,参数之间以&相连,POST放在Request body中,所以GET请求不安全,敏感信息会暴露在url上。

  • GET和POST还有一个重大区别是发送数据包数量不同,GET 请求产生一个 TCP 数据包,而POST请求产生俩个 TCP 数据包,

    1、对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

    2、而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

GET 请求过程:
  1. 浏览器发起请求 TCP 连接(第一次握手)
  2. 服务器响应进行 TCP 连接(第二次握手)
  3. 浏览器确认,并发送 GET 请求头和数据(第三次握手)
  4. 服务器返回 200 OK响应
POST 请求过程:
  1. 浏览器发起请求 TCP 连接(第一次握手)
  2. 服务器响应进行 TCP 连接(第二次握手)
  3. 浏览器确认,并发送 POST 请求头(第三次握手)
  4. 服务器返回100 Continue响应
  5. 浏览器发送数据
  6. 服务器返回 200 OK响应

GET和POST相同点

从上面我们了解到HTTP协议是基于TCP/IP协议的一个子协议,所以GET 和 POST 请求的本质是相同的,都是TCP/IP请求。

常见HTTP状态码

状态码描述
200成功
201请求成功并且服务器创建了新的资源
202服务器已接受请求,但尚未处理
203请求正在被执行,但还没有处理完
204服务器成功处理了请求,但没有返回任何内容
301永久重定向
302临时重定向
303表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源
304本地缓存
400错误请求,服务器不理解请求的语法
401未经许可,需要通过HTTP认证
403服务器拒绝请求
404服务器找不到请求的资源
500+服务器原因

结语

对于GET 和 POST 方法的异同就总结了这么多,疏漏之处在所难免,欢迎大家指正,我会及时修改。