HTTP协议在现代网络通信中被广泛应用,在HTTP 1.0版本中有7种请求方式,在HTTP 1.1版本中有8种请求方式,而这些请求方式中最常用的就是GET和POST,网上关于GET与POST请求方式的区别的文章很多,但却都不够全面。现在我们来全面阐述这两种方法的区别。

(一)从HTTP报文来看

  GET请求方式将请求信息放在URL后面,请求信息和URL之间以?隔开,请求信息的格式为键值对,例如 https://baike.baidu.com/item/Python/407313?fr=aladdin,这种请求方式将请求信息直接暴露在URL中,安全性较低。另外从报文结构上来看,由于请求信息放置在URL中,因此请求报文中不需要报文体。

  POST请求方式将请求信息放置在报文体中,相获得请求信息必须解析报文,因此安全性较GET方式要高一些(事实上要获得报文体中的请求信息也是很容易的,因此安全性上两者并没有太多的区别,具体解决传输过程中的安全性问题还要靠HTTPS),此外在请求报文中含有报文体。

  由于GET中的请求信息放置在URL中,因此是有长度限制的,因为URL本身是有长度限制的。POST中的请求信息是放置在报文体中,因此对数据长度是没有限制的。

(二)从数据库层面来看

  CET请求方式符合幂等性和安全性,(幂等性的定义:对数据库的一次操作和多次操作获得的结果是一致的,则认为符合幂等性。安全性的定义:对数据库的操作没有改变数据库中的数据,则认为符合安全性),GET请求方式是做查询操作,因此不会改变数据库中原有的数据,认为符合安全性。事实上GET请求可能会出现多次请求的结果(例如在两次请求中间对数据库中的数据作了更改),从这来说是不符合幂等性的定义,但是因为GET请求知识查询数据库,不会对数据库做任何更改,因此也认为是幂等的。

  POST请求方式是既不幂等又不安全,首先POST请求方式往数据库中提交数据的,因此会改变数据库中的数据。其次,POST请求方式每次获得的结果都有可能不一样,因为POST请求是作用在上一级的URL上的,则每一次请求都会添加一份新资源(这也是POST和PUT方式的最大区别,PUT方式是幂等的)。

  注意:在这里提到的安全性和上一部分提到的安全性不是同一概念,不要混淆。

(三)从其他层面来看

  GET请求能够被缓存。

  GET请求会保存在浏览器的浏览记录中。

  以GET请求的URL能够保存为浏览器书签。

  而POST方式都不具备上述功能。缓存也是GET请求被广泛应用的根本,在现代网络上每天产生的请求数目是巨大地,并且其中绝大部分请求均为只读请求,如果所有这些请求都要交由 Web 服务器直接处理,这无疑是巨大的资源浪费。从第二部分知道GET表达的是一种幂等的、安全的,它除了返回结果不应该会产生其它副作用,因此绝大部分GET请求(通常超过90%)都直接被CDN缓存了,这能大大减少 Web 服务器的负担。 而POST是非幂等的,有副作用的操作,所以必须交由 Web 服务器处理。

HTTP协议中GET和POST的区别(详细描述)的更多相关文章

  1. C++中引用与指针的区别(详细介绍)

    C++中引用与指针的区别(详细介绍) C++中的引用与指针的区别   指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一 ...

  2. C#的HTTP协议中POST与GET的区别

    引言 HTTP协议我想任何IT人士都耳熟能详了,大家都能说出个所以然来.但是如果我问你HTTP协议的请求方法有哪些?POST与GET的差异?GET或POST传送数据量的大小有限制吗?HTTP响应的状态 ...

  3. http协议中302和303的区别

    http1.0协议中只有302码,没有303状态码:http1.1,在默认情况下,很多服务端基础程序,为了兼容http1.0,在遇到本应响应303时,也给客户端响应了302. 碰到的问题: 场景: 在 ...

  4. PHP中 post 与get的区别 详细说明

    1.Get 方法通过 URL 请求来传递用户的数据,将表单内各字段名称与其内容,以成对的字符串连接,置于 action 属性所指程序的 url 后,如[url]http://www.jincaib.c ...

  5. HTTP协议中PUT和POST使用区别 【转载】

    有的观点认为,应该用 POST来创建一个资源,用PUT来更新一个资源:有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源:还有的观点认为可以用PUT和 POST中任何一个来做创建或者更 ...

  6. 【转】TCP/IP协议中TCP和UDP的区别

    TCP协议与UDP协议的区别    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

  7. HTTP协议中PUT和POST使用区别

          有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源:有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源:还有的观点认为可以用PUT和POST中任何一个来做创 ...

  8. Http协议中get和post的区别

    get(默认值)是通过URL传递表单值,数据追加在action属性后面. post传递的表单值是隐藏到http报文体中,url中看不到. get是通过url传递表单值,post通过url看不到表单域的 ...

  9. Http协议中get和post的区别 转载https://www.cnblogs.com/lexiaofei/p/http.html

    get(默认值)是通过URL传递表单值,数据追加在action属性后面. post传递的表单值是隐藏到http报文体中,url中看不到. get是通过url传递表单值,post通过url看不到表单域的 ...

随机推荐

  1. Maven(七)Eclipse使用Maven命令

    由于没有mvn compile (其余命令类似) 可以点解上面框中选项手动输入compile

  2. 微信wx.request

    官方 wx.request 代码,Post 没成功过,使用Get 方式成功了. wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '' ...

  3. 洛谷P4561 [JXOI2018]排序问题(二分 期望)

    题意 题目链接 Sol 首先一种方案的期望等于它一次排好的概率的倒数. 一次排好的概率是个数数题,他等于一次排好的方案除以总方案,也就是\(\frac{\prod cnt_{a_i}!}{(n+m)! ...

  4. 【20190220】JavaScript-知识点整理:对象创建方式、原型、闭包

    一.对象创建方式 1. 工厂模式 这种模式抽象了创建具体对象的过程,用函数来封装以特定接口创建对象的细节.存在的问题是无法通过 instanceof 识别一个对象的类型. function creat ...

  5. @Tranactional 注解分析

    Spring可以通过注解@Transactional来为业务逻辑层的方法(调用DAO完成持久化动作)添加事务能力,如下是@Transactional注解的定义 @Tranactional注解分析 作用 ...

  6. Salesforce 外部对象

    外部对象(External Object) 在Salesforce中,管理员或开发者可以通过"外部对象"将其他系统中的数据虚拟地展现为Salesforce的对象.每个外部对象都要连 ...

  7. Linux网络编程--socket

    1.socket的核心思想是,作为服务器间的进程间通信的最底层的实现,常用的大部分网络协议都是基于socket实现. 2.socket 是如何与最终的低层收发包建立联系的? 3.socket 是如何与 ...

  8. Android为TV端助力 转载:内存泄露与内存溢出的区别

    内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出. ...

  9. Android为TV端助力 Canvas 和 Paint用法

    自定义view里面的onDraw方法,在这里我们可以绘制各种图形,onDraw里面有两个API我们需要了解清楚他们的用法:Canvas 和 Paint. Canvas翻译成中文就是画布的意思,Canv ...

  10. 「Android」 Surface分析

    本篇针对Surface模块进行分析,从Java层的Activity创建开始,到ViewRoot.WindowsManagerService,再到JNI层和Native层. 首先推荐一个Android源 ...