工作当中经常遇到这两种类型的接口,也会被问到这两种类型的区别,这里简单总结一下算是一个简单的回忆吧。

  GET和POST是http协议的两种发送请求的方法。因为http的底层是TCP/IP,所以GET和POST的底层也是TCP/IP,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。从这点看它们有是有一些相同点的。

不同点:

1.最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。

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

  get会将请求参数放在请求的url中,回退操作实际上浏览器会从之前的缓存中拿结果;post每次调用都会创建新的资源。.另外在method的定义上,get是幂等的,执行多少遍不影响最终存储的结果。而post每次调用都会创建新的资源。Get put delete 都是等幂的,post请求两次得到两个不同的url,服务器创建了两份不同的资源,所以post不是等幂的。(等幂是说一次或多次请求资源状态不变)

3.GET请求会被浏览器主动cache,而POST不会。

  HTTP缓存的基本目的就是使应用执行的更快,更易扩展,但是HTTP缓存通常只适用于idempotent request(可以理解为查询请求,也就是不更新服务端数据的请求),这也就导致了在HTTP的世界里,一般都是对Get请求做缓存,Post请求很少有缓存。

  get多用来直接获取数据,不修改数据,主要目的就是DB的search语句的感觉。用缓存(有个代理服务器的概念)的目的就是查db的速度变快。

  post则是发送数据到服务器端去存储。类似db里的update delete和insert语句的感觉。更新db的意思。数据必须放在数据库,所以一般都得去访问服务器端。

4.GET只能进行url编码,POST支持多种方式编码。

  url编码指的是urlEncode,POST提交数据的方式有application/x-www-form-urlencoded(浏览器form表单默认的编码方式,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码),multipart/form-data(表单上传文件时,必须让 form 的 enctype 等于这个值),application/json(告诉服务端消息主体是序列化后的 JSON 字符串),text/xml(一个文本内容,根据自己和浏览器的约定进行传输)。

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

  和缓存差不多,也是为了应用执行的更快。

6.GET请求在URL中传送的参数是有长度限制的,而POST没有。

  Get请求理论上是没有长度限制的,但是为了解析的方便大多数浏览器规定大小为2k。POST一般情况下是没有限制的。

7.对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

  URL 是 HTTP 的一个首部。既然作为一个首部,那么根据约定,一定是 ASCII 字符的。

8.GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息

  get请求参数在url中,即传送的数据是在链接里面可看到,有安全问题。

  post参数不是在url里面而是在请求体中,因此安全性较get高。

9.GET请求会产生一个TCP数据包,POST请求会产生两个TCP数据包。

  GET请求是把http header和data一并发出去,服务器响应200,POST请求是浏览器先发送header,服务器响应100,浏览器发送data,浏览器再响应200。所以get请求只请求一次,就可以取到数据。而post请求需要请求两次才能得到想要的数据。

最新文章

  1. unity播放视频
  2. [译]git的那些flag
  3. layout优化实践
  4. 非对称加密RSA的应用及在C#中的实现
  5. Sublime更换默认字体的方法
  6. 修改MySQL的默认数据存储引擎
  7. HDU 5145 NPY and girls 莫队+逆元
  8. Android课程---qq登陆页面(练习)
  9. hdu4691 Front compression ——暴力 || 后缀数组
  10. eclipse插件开发中全局对象的获取
  11. YEBIS
  12. jdk8永久代从方法区移除的验证
  13. oracle的nvl和sql server的isnull函数
  14. libevent evbuffer bug
  15. Chrome NativeClient创建 (转)
  16. 美国企业人事喜欢考的3道.Net经典笔试题
  17. git合并远端分支到本地分支的两种方式
  18. spring+springmvc+mybatis整合框架搭建
  19. 排序--SelectionSort 选择排序
  20. Ehcache 3.7文档—基础篇—JCache aka JSR-107

热门文章

  1. canvas画扇形、饼图
  2. 01 MATLAB基本概念
  3. SQL注入之SQLmap
  4. Oracle如何修改密码?如何解锁scott用户?
  5. centos安装出现dracut-initqueue timeout错误
  6. python组合数据类型和数据结构
  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:禁用按钮
  8. GreenPlum 提取数据表信息
  9. threading 多线程
  10. redis有序集合-zset