HTTP协议中GET和POST的区别(详细描述)
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的区别(详细描述)的更多相关文章
- C++中引用与指针的区别(详细介绍)
C++中引用与指针的区别(详细介绍) C++中的引用与指针的区别 指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一 ...
- C#的HTTP协议中POST与GET的区别
引言 HTTP协议我想任何IT人士都耳熟能详了,大家都能说出个所以然来.但是如果我问你HTTP协议的请求方法有哪些?POST与GET的差异?GET或POST传送数据量的大小有限制吗?HTTP响应的状态 ...
- http协议中302和303的区别
http1.0协议中只有302码,没有303状态码:http1.1,在默认情况下,很多服务端基础程序,为了兼容http1.0,在遇到本应响应303时,也给客户端响应了302. 碰到的问题: 场景: 在 ...
- PHP中 post 与get的区别 详细说明
1.Get 方法通过 URL 请求来传递用户的数据,将表单内各字段名称与其内容,以成对的字符串连接,置于 action 属性所指程序的 url 后,如[url]http://www.jincaib.c ...
- HTTP协议中PUT和POST使用区别 【转载】
有的观点认为,应该用 POST来创建一个资源,用PUT来更新一个资源:有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源:还有的观点认为可以用PUT和 POST中任何一个来做创建或者更 ...
- 【转】TCP/IP协议中TCP和UDP的区别
TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...
- HTTP协议中PUT和POST使用区别
有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源:有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源:还有的观点认为可以用PUT和POST中任何一个来做创 ...
- Http协议中get和post的区别
get(默认值)是通过URL传递表单值,数据追加在action属性后面. post传递的表单值是隐藏到http报文体中,url中看不到. get是通过url传递表单值,post通过url看不到表单域的 ...
- Http协议中get和post的区别 转载https://www.cnblogs.com/lexiaofei/p/http.html
get(默认值)是通过URL传递表单值,数据追加在action属性后面. post传递的表单值是隐藏到http报文体中,url中看不到. get是通过url传递表单值,post通过url看不到表单域的 ...
随机推荐
- 三、HTTP基础路由详解
1.一次请求的完整实现过程 2.基础路由 Route::get($uri,$callback); Route::post($uri,$callback); Route::put($uri,$callb ...
- js求渐升数的第100位
我弟考了道数学竞赛题,问我能不能用代码算结果.. 题目是这样的 用 1.2.3.4.5 组合数字,然后排列大小,从小到大,求排在第100位的数值大小 function foo(chars) { ; i ...
- 中文汉字和常见英文数字等的unicode编码范围
- Python相关机器学习‘武器库’
开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处 ...
- linux连接数过多,导致ping包丢包的问题解析
1.首先要明确,无论是tcp, udp, raw等这些都要占用socket, 那么就涉及到连接数的问题. 所以,linux连接数的问题,不仅仅是tcp连接数. 2.查看当前系统中所有的socket 连 ...
- JMeter 中实现发送Java请求
JMeter 中实现发送Java请求 1. 步骤1 新建JAVA项目 File -> New -> Java Project 如上图,填写Project Name,然后Next,打开以J ...
- Android udp json+数组 --->bytes发送数据
Android json支持五种数据类型 String / int(float)/bool / null / object 今天说 object : json = new JSONObject( ...
- python--线程同步原语
Threading模块是python3里面的多线程模块,模块内集成了许多的类,其中包括Thread,Condition,Event,Lock,Rlock,Semaphore,Timer等等.下面这篇文 ...
- spark RDD,reduceByKey vs groupByKey
Spark中有两个类似的api,分别是reduceByKey和groupByKey.这两个的功能类似,但底层实现却有些不同,那么为什么要这样设计呢?我们来从源码的角度分析一下. 先看两者的调用顺序(都 ...
- sublime text 3 优化配置
目录 1. sublime text 3 模板插件 SublimeTmpl 配置 修改模板内容格式 修改快捷键 2. 设置sublime text的 TAB 为4个空格 3. 添加markdown支持 ...