http请求方式GET、POST、PUSH和DELETE的区别?

2020-08-26 09:35发布

6条回答
小猪仔
2楼 · 2020-08-26 09:37

GET操作是安全的。所谓安全是指不管进行多少次操作,资源的状态都不会改变。比如我用GET浏览文章,不管浏览多少次,那篇文章还在那,没有变化。当然,你可能说每浏览一次文章,文章的浏览数就加一,这不也改变了资源的状态么?这并不矛盾,因为这个改变不是GET操作引起的,而是用户自己设定的服务端逻辑造成的。
PUT,DELETE操作是幂等的。所谓幂等是指不管进行多少次操作,结果都一样。比如我用PUT修改一篇文章,然后在做同样的操作,每次操作后的结果并没有不同,DELETE也是一样。顺便说一句,因为GET操作是安全的,所以它自然也是幂等的。
POST操作既不是安全的,也不是幂等的,比如常见的POST重复加载问题:当我们多次发出同样的POST请求后,其结果是创建出了若干的资源。
安全和幂等的意义在于:当操作没有达到预期的目标时,我们可以不停的重试,而不会对资源产生副作用。从这个意义上说,POST操作往往是有害的,但很多时候我们还是不得不使用它。
还有一点需要注意的就是,创建操作可以使用POST,也可以使用PUT,区别在于POST 是作用在一个集合资源之上的(/uri),而PUT操作是作用在一个具体资源之上的(/uri/xxx),再通俗点说,如果URL可以在客户端确定,那么就使用PUT,如果是在服务端确定,那么就使用POST,比如说很多资源使用数据库自增主键作为标识信息,而创建的资源的标识信息到底是什么只能由服务端提供,这个时候就必须使用POST。

IT学习
3楼 · 2022-03-18 11:09

1、GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。


2、与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。


3、POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。


4、DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。


回答: 2022-03-18 11:09

1、GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。


2、与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。


3、POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。


4、DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。


我的网名不再改
4楼 · 2020-08-26 15:46

      http协议、一种网络中,文件传送遵循的协议。一种无状态的协议、http协议服务器端不跟浏览器端建立长久的通信连接,即服务端无法识别请求端的到底是谁!建立http通信之后,服务端将文件内容传送给浏览器端接收就完成一次请求。当然一个页面,往往由多个http请求构成、图片,CSS等资源的请求~可能是一个页面进行多个http请求之后得到的结果。

    http的无状态,理解成:不论是哪个浏览求向百度发送请求,都是得到同样的结果。百度服务器不能确定前后两次向百度发起请求的是不是同一个客户端。(当然可以通过cookies、ip分析跟踪到具体的浏览器以及用户行为)


    在我的机器上请求百度https://www.baidu.com 如图所示,当请求www.baidu.com这个网址之后,解析到百度服务下对应的资源,同理浏览器端所呈现的各种背景图片、样式,都会发起http请求得到对应的文件资源。包括图片、css样式文件信息跟请求的html文件,整体构成用户的浏览器端的看到的状态。




  Http协议,发起请求成功,首先是通过DNS域名解析器,将www.baidu.com这个域名,解析到正确的ip地址的服务器上,一般情况没有指定后面具体的资源,浏览器会将自动定位到根目录"/"下即将www.baidu.com拼凑成www.baidu.com/ ,www.baidu.com只是DNS可以解析到ip的域名,"/"是指定资源的位置,一般根目录下会默认为index文件(当然这个随意服务器配置进行更改)。其实在浏览器直接输入对应ip地址,进行请求是一样的。因为服务器最后请求的实质,就是通过ip进行定位。



  Http协议的状态码,常见的应该是404错误,直接抛出页面不存在的错误。当时实际在浏览器工作当中,200跟304的响应码应该是最多的。只是大多数人没有去看底层http请求响应流程。200应该是浏览器发送请求,服务器接收到了请求,建立连接成功的响应码。所以当200状态码时候,就是可以正常把服务器文件内容传送到浏览器端。304就是在页面刷新时候,直接从缓存里面拿数据。避免频繁大量的请求增加服务器响应的压力,同时减少用户等待重新加载CSS、js。图片的时间~



(意外发现一个彩蛋~~~百度console有招聘信息~~~~哈哈~~~)


同时发现我登陆状态请求www.baidu.com跟直接请求ip地址是不一样的协议,记住密码登陆下情况下是https协议,走的是443端口。而直接ip地址走的是默认的80端口。



   记住密码,会请求登陆页面,会走post请求~

       这里就会出现http协议,请求方式get跟post的区别,get请求的时候,一般都是url资源后面“?”跟着对应的参数,多个参数以‘&’符进行连接~所以如果以get方式请求,请求内容一般都是可以直接在url地址栏直接捕捉看到的。但是get请求,会把请求的参数内容封装在http请求body中~貌似这样会安全一点,其实用wireshark或者fidder抓包工具,就能很容易捕捉到http请求,body体中传送的内容。


    就以前为了面试:get跟post 的区别,都会常说两点,第一,get请求方式,不安全。post安全。第二,get请求参数内容有限制大小,post请求没有限制。

  这是一种似是而非的答案,其实http协议定义跟这完全没有关系!第一,get请求不安全,post请求同样也不安全。原因基于抓包一看,就得到内容。第二,http协议从来就没有限制过get请求内容的大小,而是浏览求对url地址的长度的限制,不同浏览器对url请求的参数内容大小会有限制。

   这根http协议定义就有点关联啦,put/delete/get/pos依次可以对应数据库的增、删、改、查。所以get请求一般是查数据的,而且内容是无论请求多少,都是一样不会发生改变的。当然,get也可以带参数,这里狭义的认为,只要不会影响数据结构的请求方式,都是等幂请求。get请求也是http协议定义中的标准使用。

     post、put、delete自然就是不等幂请求,一般会改变数据结构。对应会发生数据结构的改变。这里如果用过Laravel框架,其中的resource路由的定义,就会这个get、post、delete、put请求方式有深刻的理解。

   同样的url地址,同样的参数形式,会因为请求方式的get、post、put、delete的不同,会分别发生不同的行为。得到不同的结果。

    php是一种弱语言,所以当时我选择php入门的原因。就是因为php使用便捷,没有其他语言那么严格。其中get、post请求应该是php中用得最多的地方,phper都知道,可以通过$_GET/$_POST分别获得get、post方式提交的数据。但是经常为了方便,我们会用到$_REQUEST这个全局变量来获取前台不论是post还是get方式提交过来的值。但是这样就会产生一个问题,没有严格区分到底是get还是post请求方式提交的数据。容易产生问题,举一个简单的例子:如果在页面删除一条数据,没有严格区分提交方式,"xxx.delete.php?id=44"类似于这种请求,可以现象这种请求在一个页面默认都是get请求方式,谷歌浏览器有一个加速器,就是会提前把get请求方式的东西,比如CSS跟js等提前给加载进来,以加快运行效率。如果页面存在这种delete请求,也会不知不觉中被删除了数据。这样就容易导致很严重的bug~~当然这只是一个简单的便于实际理解的例子,实际情况远远没有这么简单容易。不过由此可以引出,明确分清楚,get跟post请求方式,以及put、delete请求方式,在项目中还是很有必要的!



   在了解http协议的基础上,多看看http请求头,body体,http应答头~看这个都就会自然注意到重要信息明文传送的危险性。然后在此基础上加深对get、post、delete、put请求方式的理解,特别推崇Laravel框架的路由resource的路由风格~严格遵循了RESTful风格的!



爱梦 - 拿来吧你
5楼 · 2021-07-02 09:39

1.get请求

目的:通过request对象,获取查询参数

过程:

ohttp://xxx.com/index/?name=xxx&age=ccc&name=yyy

o request.GET∶是一个查询字典

o request.GET.get(key)#获取单个key , value

orequest.GET.getlist(key)#获取单个key,对应的多个value,得到的是list列表。

2.post,put,delete

目的:获取request获取表单,及非表单提交的非查询参数数据

常见的请求方式有:post,put,delete,PATCH

请求体中的数据,一类是json,一类是表单数据

request。POST:获取表单数据(会把body的内容,解析一份,解析成一个字典)

request。body:获取json数据

需要将bytes类型转成dict格式,用到decode(), loads()



post,put都需要处理请求体,delete可以没有请求体

post,通过请求头中的content-type字段来区分格式

表单格式:name=zhangsan&age=18

json格式:'{"name":"zhangsan", "age":18}'



超甜的布丁
6楼 · 2021-07-13 11:04

1、GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。

2、与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。

3、POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。

4、DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。

就像前面所讲的一样,既然PUT和POST操作都是向服务器端发送数据的,那么两者有什么区别呢。。。POST主要作用在一个集合资源之上的(url),而PUT主要作用在一个具体资源之上的(url/xxx),通俗一下讲就是,如URL可以在客户端确定,那么可使用PUT,否则用POST。

综上所述,我们可理解为以下:

1、POST /url 创建

2、DELETE /url/xxx 删除

3、PUT /url/xxx 更新

4、GET /url/xxx 查看


20200921文 - 做更棒的自己!
7楼 · 2021-11-07 20:48

Get 方法通过 URL 请求来传递用户的数据,将表单内各字段名称与其内容,以成对的字符串连接,置于 action 属性所指程序的 url 后,数据都会直接显示在 url 上,就像用户点击一个链接一样;Post 方法通过 HTTP post 机制,将表单内各字段名称与其内容放置在 HTML 表头(header)内一起传送给服务器端交由 action 属性能所指的程序处理,该程序会通过标准输入(stdin)方式,将表单的数据读出并加以处理;

Get 方式需要使用 Request,QueryString 来取得变量的值;而 Post 方式通过RequestForm 来访问提交的内容;

Get 方式传输的数据量非常小,一般限制在 2 KB 左右,但是执行效率却比 Post 方法好;而 Post 方式传递的数据量相对较大,它是等待服务器来读取数据,不过也有字节限制,这是为了避免对服务器用大量数据进行恶意攻击。建议:除非你肯定你提交的数据可以一次性提交,否则请尽量用 Post 方法;

相关问题推荐

  • 回答 120

    相对前几年来说,要高上不少了,毕竟入行的人也是越来越多了,基础的工作对应想要参与的人群基数越来越大,但是对于高端人才的需求还是很多,人才还是相对稀缺性的。所以,想要学web或者其他技术也一样,别等,别观望。web前端就业方向特别多包括web前端开发...

  • 回答 25

    相对定位和绝对定位是定位的两种表现形式,区别如下:一、主体不同1、相对定位:是设置为相对定位的元素框会偏移某个距离。2、绝对定位:absolute 脱离文档流,通过 top,bottom,left,right 定位。二、特点不同1、相对定位:在使用相对定位时,无论是否进行移...

  • 抓包是什么意思?2020-04-01 17:36
    回答 7
    已采纳

    抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。抓包可以通过抓包工具来查看网络数据包内容。通过对抓获的数据包进行分析,可以得到有用的信息。目前流行的...

  • 回答 89

    常用的前端框架有Bootstrap框架、React框架、Vue框架、Angular框架、Foundation框架等等

  • 回答 65
    已采纳

    前端是目的就业前景非常不错的一个计算机技术,但是自学的话还是有一定难度的,网络上自学是碎片化的,同时互联网技术跟新换代快,自己的话比较吃力也学习不到最新的技术。

  • SSR 是什么意思?2020-03-20 18:56
    回答 6

    SSR就是一台服务器,可以利用 SSR 在远程的服务器上配置 SSR,使其能够成为 SSR 节点,这样本地电脑或者其它设备利用 SSR 节点实现 VPN 或者远程上网及游戏加速等方面。ShadowsocksR(简称 SSR)是 Shadowsocks 分支,在 Shadowsocks 的基础上增加了一些数据...

  • 回答 52
    已采纳

    计算机培训方向比较多,建议找适合自己的方向选择培训编程类:JAVA、WEB、Python、C/C++、C#等测试类:软件测试运维类:云计算、网络安全设计类:UI设计、3D建模等

  • 回答 11

    1、代码判断xAxis: {type: 'time',splitLine: {show: false},interval: 3600, // 设置x轴时间间隔axisLabel: {formatter: function(value, index) {return liangTools.unix2hm(value)}}},首先要把xAxis 显示类型设置成time,然后设置对应X轴......

  • 回答 8

    HTML5 + CSS + JavaScript 开发 跨平台重用代码 

  • 回答 4

    采用rem单位自动响应,并提供独有栅格化系统快速定义宽高、边距节省css代码量,同时总结各大型移动端网页,提供一套ui颜色搭配规范,尺寸规范,字体规范等。

  • 回答 10

    iView UI、ioni、SUI

  • 回答 6

     jQTouch 

  • 回答 4

    如果只是普通的移动端用vue react 或者dva 如果是要编译成小程序什么的或者混生 就用uni-app(对应vue语法)taro(对应react) 或者纯原生 这个没有限制的,自己怎么舒服怎么来

  • 回答 4

    因为可以运用在网页和小程序的开饭中,而且开源,用着便宜,企业都很喜欢

  • 回答 10

    一、Visual Studio Code下载地址:https://code.visualstudio.com/微软在2015年4月30日Build 开发者大会上正式宣布了 Visual Studio Code 项目:一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器。Visual Stud...

  • 回答 9

    jQuery自带淡入淡出效果 https://www.w3school.com.cn/jquery/jquery_fade.asp 看看这个 

没有解决我的问题,去提问