网络协议——HTTP请求方法及get和post的区别

一、HTTP请求方法

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

方法描述
GET请求指定的页面信息,并返回实体主体
HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立或已有资源的修改。
PUT从客户端向服务器传送的数据取代指定的文档的内容。
PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新
DELETE请求服务器删除指定的页面。
CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS允许客户端查看服务器的性能。
TRACE回显服务器收到的请求,主要用于测试或诊断。

HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。
可以这样理解:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。

二、get与post的联系及区别

1、get与post的联系

(1)get和post本质上建立的都是TCP连接,所以get和post能做的事情是一样的。给get加上request body,给post带上url参数,技术上也是完全行的通的。
(2)主要是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
(3)总的来说get主要用于向服务器索取数据,而post主要用于向服务器提交数据。

2、get与post的区别
方式getpost
回退get在浏览器回退时是无害的,即不会产生副作用post会再次提交请求,产生一些副作用
传递方式get参数通过url传递post放在request body中
编码格式get请求只能进行url编码post支持多种编码方式
转码get 请求中有非 ASCII 字符,会在请求之前进行转码post不用,因为post在request body中,通过 MIME,也就可以传输非 ASCII 字符
容量get可传递的数据长度较小post可传递的数据长度较大
缓存get请求会被浏览器主动缓存,get请求参数会被完整保留在浏览器历史记录里post请求不会被浏览器主动缓存 ,除非手动设置。post中的参数不会被保留
安全性相对不安全,因为get请求的参数直接暴露在url上,而且数据会保存在浏览器历史纪录中相对安全一些,但由于HTTP是明文传输,所以post请求通过开发者工具或者抓包也可以看到。
数据包get产生一个TCP数据包,对于get方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)post产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

关于容量: 实际上HTTP协议对url的长度是没有限制的,限制URL长度大多数是浏览器或者服务器的配置参数。同理post理论上来说也没有大小限制,实际上post所能传递的数据量取决于服务器的设置和内存大小。
关于数据包: 对于get方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于post,浏览器先发送header,服务器响应100 continue后,浏览器再发送data,服务器响应200 (返回数据)。(并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次)

三、post与put的区别

先了解一个概念:幂等性
幂等通俗来说是指不管进行多少次重复操作,都是实现相同的结果。

GET,PUT,DELETE都是幂等操作,而POST不是。

POST不是幂等操作,因为一次请求添加一份新资源,二次请求则添加了两份新资源,多次请求会产生不同的结果。

举一个简单的例子,假如有一个博客系统提供一个Web API,模式是这样http://superblogging/blogs/{blog-name},很简单,将{blog-name}替换为我们的blog名字,往这个URI发送一个HTTP PUT或者POST请求,HTTP的body部分就是博文,这是一个很简单的REST API例子。

我们应该用PUT方法还是POST方法?

取决于这个REST服务的行为是否是idempotent(幂等性)的,假如我们发送两个http://superblogging/blogs/post/Sample请求,服务器端是什么样的行为?如果产生了两个博客帖子,那就说明这个服务不是idempotent的,因为多次使用产生了副作用了嘛;如果后一个请求把第一个请求覆盖掉了,那这个服务就是idempotent的。前一种情况,应该使用POST方法,后一种情况,应该使用PUT方法。

post:用于创建资源,如果两个请求相等,后一个请求不会把前一个覆盖掉。(增)
put:用于更改资源,如果两个请求相等,后一个请求会覆盖前一个请求。(改)

转载于:https://blog.csdn.net/CC_Together/article/details/105552724.
https://blog.csdn.net/xcc_2269861428/article/details/80433382

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值