浅谈HTTP中GET和POST请求的区别

  • HTTP认知:

  1. HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET和POST本质上就是TCP链接,并无差别。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

  2. HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET、POST、PUT、DELETE。URL全称是统一资源定位符。它们本质上就是TCP链接,但是由于HTTP的规定和浏览器/服务器的限制,导致它们在应用过程中体现出一些不同

  3. 我们可以这样理解:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET、POST、PUT、DELETE就对应着这个资源的查、改、增、删4个操作。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息,PUT一般用于增加资源信息,DELETE一般用于删除资源信息

  • RFC探秘 :

    1. RFC定义:

    征求意见稿(英语:Request For Comments,缩写为RFC),是由互联网工程任务组(IETF)发布的一系列备忘录。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件,以编号排定。目前RFC文件是由互联网协会(ISOC)赞助发行。

    1. RFC理解:

    简单理解RFC就是互联网的规范,我们通常所说的「协议」就是以RFC的形式存在。

    1. RFC7231里定义了HTTP方法的几个性质:

    • Safe - 安全这里的「安全」和通常理解的「安全」意义不同,如果一个方法的语义在本质上是「只读」的,那么这个方法就是安全的。客户端向服务端的资源发起的请求如果使用了是安全的方法,就不应该引起服务端任何的状态变化,因此也是无害的。 此RFC定义,GET, HEAD, OPTIONS 和 TRACE 这几个方法是安全的。但是这个定义只是规范,并不能保证方法的实现也是安全的,服务端的实现可能会不符合方法语义,正如上文说过的使用GET修改用户信息的情况。引入安全这个概念的目的是为了方便网络爬虫和缓存,以免调用或者缓存某些不安全方法时引起某些意外的后果。User Agent(浏览器)应该在执行安全和不安全方法时做出区分对待,并给用户以提示。

    • Idempotent - 幂等

    幂等的概念是指同一个请求方法执行多次和仅执行一次的效果完全相同。按照RFC规范,PUT,DELETE和安全方法都是幂等的。同样,这也仅仅是规范,服务端实现是否幂等是无法确保的。引入幂等主要是为了处理同一个请求重复发送的情况,比如在请求响应前失去连接,如果方法是幂等的,就可以放心地重发一次请求。这也是浏览器在后退/刷新时遇到POST会给用户提示的原因:POST语义不是幂等的,重复请求可能会带来意想不到的后果。

    • Cacheable - 可缓存性 顾名思义就是一个方法是否可以被缓存,此RFC里GET,HEAD和某些情况下的POST都是可缓存的,但是绝大多数的浏览器的实现里仅仅支持GET和HEAD。关于缓存的更多内容可以去查看RFC7234。

  • GET和POST请求的方式的区别 :

    1. GET和POST本质上都是TCP链接,所以它们本质上并没有区别

    2. GET和POST有一个重大区别:GET产生一个TCP数据包;POST产生两个TCP数据包。但并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

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

    4. GET和POST表面上的区别:

      ① get是从服务器上获取数据,post是向服务器传送数据。

      get 和 post只是一种传递数据的方式,get也可以把数据传到服务器,他们的本质都是发送请求和接收结果。只是组织格式和数据量上面有差别

      ② get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

      ③ 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

      ④ get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。 post基本没有限制。

      ⑤ get安全性非常低,post安全性较高。 因为参数直接暴露在URL上,所以不建议使用get请求来传递敏感信息。

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

      ⑦ GET请求只能进行url编码,而POST支持多种编码方式。

      ⑧ GET请求会被浏览器主动缓存,而POST不会,除非手动设置。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留

      ⑨ GET请求在URL中传送的参数是有长度限制的,而POST没有。对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

    5. 其他相关区别

      1) . 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

      2). GET的语义是请求获取指定的资源。GET方法是安全、幂等、可缓存的。由于GET请求一般是用于资源信息的获取而非修改,所以GET意味着所谓的安全。换言之,GET请求一般不会产生副作用,它仅仅是获取资源信息,就像数据库查询一样,不会改变数据,不会影响资源的状态。所以,GET请求不一般会改变服务器状态。幂等意味着对于同一个URL的多个请求应该返回同样的结果。GET方法的报文主体没有任何语义

      3) . POST的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST不安全,不幂等,(大部分实现)不可缓存

      4) . GET是通过URL方式请求,可以直接看到,明文传输。POST是通过请求header请求,可以开发者工具或者抓包可以看到,同样也是明文的。

浅谈HTTP中GET和POST请求方式的区别的更多相关文章

  1. ajax中Post和Get请求方式的区别?

    ajax中Post和Get请求方式的区别: 1.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示. 2.Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的 ...

  2. 浅谈mysql中varchar(m)与char(n)的区别与联系

    mysql建表长度的限制 在mysql建表时,出现以下报错信息: 错误一:行大小过大,所使用的表这种类型的最大的行大小,不算BLOB类型,是65535.(这是我翻译的)    原因是MySQL在建表的 ...

  3. 浅谈javascript中stopImmediatePropagation函数和stopPropagation函数的区别

    在事件处理程序中,每个事件处理程序中间都会有一个event对象,而这个event对象有两个方法,一个是stopPropagation方法,一个是stopImmediatePropagation方法,两 ...

  4. 浅谈iOS中的userAgent

    浅谈iOS中的userAgent   User-Agent(用户代理)字符串是Web浏览器用于声明自身型号版本并随HTTP请求发送给Web服务器的字符串,在Web服务器上可以获取到该字符串. 在公司产 ...

  5. 浅谈HTTP中GET、POST用法以及它们的区别

    浅谈HTTP中GET.POST用法以及它们的区别 HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符.我们可以这样认为: 一 ...

  6. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

  7. 浅谈JAVA中如何利用socket进行网络编程(二)

    转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...

  8. 浅谈jQuery中的Ajax

    浅谈jQuery中的Ajax 一.前言 jQuery 对 Ajax 操作进行了封装, 在 jQuery 中最底层的方法时 $.ajax(), 第二层是 load(), $.get() 和 $.post ...

  9. 浅谈 HTTP中Get与Post的区别

    浅谈 HTTP中Get与Post的区别 存在的误区 有人说 HTTP 协议下的 Get 请求参数长度是有大小限制的,最大不能超过XX,而 Post 是无限制的,看到这里,我想他们定是看多了一些以讹传讹 ...

随机推荐

  1. ZT 链表逆序

    链表逆序 原帖地址http://blog.csdn.net/niuer09/article/details/5961004 分类: C/C++2010-10-23 17:23 18425人阅读 评论( ...

  2. QT里使用Gsoap调用WebService

    错误了很多天,今天终于搞定,并得到了服务器的结果.这里把错误的原因记录下来. 首先是这里,之前一直没有加载进来,所以一直报错 SOURCES += main.cpp\ gsoap/soapClient ...

  3. 红黑树及其实例JDK中的TreeMap

    红黑树是一种自平衡二叉查找树(binary search tree,BST),红黑树是一种比较复杂的数据结构,红黑树查找.插入.删除元素的时间复杂度为O(log n),n是树中元素的数目.文章的要讲的 ...

  4. 最新版本2018.1.1webstorm安装、汉化、破解教程

    一.安装(下载与激活) 1.官网下载安装包https://www.jetbrains.com/webstorm/ 2.开始安装 3.选择安装目录,点击下一步 4.勾选64位,点击下一步 5.继续下一步 ...

  5. CF600E:Lomsat gelral(线段树合并)

    Description 一棵树有n个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和. Input 第一行一个$n$.第二行$n$个数字是$c[i]$.后面$n-1$ ...

  6. php魔术变量

    __LINE__   文件中的当前行号 __FILE__ 文件的完整路径和文件名 __DIR__  文件所在的目录 __FUNCTION__  自 PHP 5 起本常量返回该函数被定义时的名字 __C ...

  7. class , field , method

    Class类 由于Class类没有公共构造方法,所以创建Class的对象的方法有以下几种: 1.通过Class.forName静态方法返回Class类的一个实例 2.通过类名.class来获取一个Cl ...

  8. LayIM.AspNetCore Middleware 开发日记(一)闲言碎语

    前言 前几天写博客的时候突然看见了历史上的今天.不禁感慨时光如梭,这系列博客后来被我标注了已经过时,但是还有很多小伙伴咨询我.既然过时就要更新,正好 .NET Core 也出来很久了,于是乎想到把La ...

  9. virtualbox+vagrant学习-2(command cli)-24-Aliases别名

    Aliases 别名的部分灵感来自Git自身的别名功能,它允许你创建自己的定制vagrant命令,从而使你的vagrant体验更简单.更容易.更熟悉. 别名可以在VAGRANT_HOME/ alias ...

  10. head头的设计:rfcn light-head rfcn

    faster缺点:1.不是全卷积,roi出来后是两个fc层,这样会丧失平移变性.   2.每个roi都要单独经过两个fc层,也就是分别进行分类和回归,耗时 也有种说法是roi-pooling后导致平移 ...