HTTP中GET,POST和PUT的区别

本文详细介绍了HTTP中的七种请求方法,包括GET、POST、PUT、DELETE等,并对比了它们之间的区别,例如GET与POST的区别、PUT与POST的区别等。

一、HTTP中定义了以下几种请求方法:

1、GET;2、POST;3、PUT;4、DELETE;
5、HEAD;6、TRACE;7、OPTIONS;

二、各个方法介绍:

1、GET方法:对这个资源的查操作

2、DELETE方法:对这个资源的删操作。但要注意:客户端无法保证删除操作一定会被执行,因为HTTP规范允许服务器在不通知客

户端的情况下撤销请求。

3、HEAD方法:与GET方法的行为很类似,但服务器在响应中只返回实体的主体部分。这就允许客户端在未获取实际资源的情

况下,对资源的首部进行检查,使用HEAD,我们可以更高效的完成以下工作:

在不获取资源的情况下,了解资源的一些信息,比如资源类型;

通过查看响应中的状态码,可以确定资源是否存在;

通过查看首部,测试资源是否被修改;

4、TRACE方法:会在目的服务器端发起一个“回环”诊断,我们都知道,客户端在发起一个请求时,这个请求可能要穿过防火墙、代理、网关、或者其它的一些应用程序。这中间的每个节点都可能会修改原始的HTTP请求,TRACE方法允许客户端在最终将请求发送服务器时,它变成了什么样子。由于有一个“回环”诊断,在请求最终到达服务器时,服务器会弹回一条TRACE响应,并在响应主体中携带它收到的原始请求报文的最终模样。这样客户端就可以查看HTTP请求报文在发送的途中,是否被修改过了。

5、OPTIONS方法:用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。

二、方发之间的区别:

1、PUT和POST

PUT和POS都有更改指定URI的语义.但PUT被定义为idempotent的方法,POST则不是.idempotent的方法:如果一个方法重复执行

多次,产生的效果是一样的,那就是idempotent的。也就是说:

PUT请求:如果两个请求相同,后一个请求会把第一个请求覆盖掉。(所以PUT用来改资源)

Post请求:后一个请求不会把第一个请求覆盖掉。(所以Post用来增资源)

2、get和post

1、GET参数通过URL传递,POST放在Request body中。

2、GET请求会被浏览器主动cache,而POST不会,除非手动设置。

3、GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

4、Get 请求中有非 ASCII 字符,会在请求之前进行转码,POST不用,因为POST在Request body中,通过 MIME,也就可以传输非 ASCII 字符。

5、 一般我们在浏览器输入一个网址访问网站都是GET请求

6、HTTP的底层是TCP/IP。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。但是请求的数据量太大对浏览器和服务器都是很大负担。所以业界有了不成文规定,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。

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

8、在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。但并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

 

内容整理来源如下:

http://www.cnblogs.com/logsharing/p/8448446.html

http://www.cnblogs.com/shanyou/archive/2011/10/17/2215930.html

http://www.jellythink.com/archives/806

### 三级标题:HTTP 方法 GETPOST、DELETE、PUT区别 HTTP 定义了多种请求方法,用于指示客户端希望服务器执行的操作。GETPOST、DELETE PUT 是其中最常用的四种方法,它们在语义、安全性、幂等性以及使用场景上有显著区别。 #### GET 方法 GET 方法用于从服务器获取资源,不应产生副作用。该方法是**安全的**(不改变服务器状态)**幂等的**(多次请求结果相同)。GET 请求的参数通常附在 URL 后面作为查询字符串,因此不适合传输敏感信息。例如: ```http GET /api/users?id=123 HTTP/1.1 Host: example.com ``` #### POST 方法 POST 方法用于向服务器提交数据,以创建新资源或触发某些服务器端操作。该方法可以改变服务器状态,因此不是安全的或幂等的。POST 请求的数据通常放在请求体中,适合传输大量或敏感信息。例如: ```http POST /api/users HTTP/1.1 Host: example.com Content-Type: application/json { "name": "John Doe", "email": "john@example.com" } ``` #### PUT 方法 PUT 方法用于更新服务器上的现有资源,其操作是**幂等的**,即多次相同的 PUT 请求应具有相同的效果。与 POST 不同,PUT 通常用于替换整个资源,而不是创建新资源或部分更新。例如: ```http PUT /api/users/123 HTTP/1.1 Host: example.com Content-Type: application/json { "name": "Jane Doe", "email": "jane@example.com" } ``` #### DELETE 方法 DELETE 方法用于删除指定的资源,通常也是**幂等的**。多次删除同一资源应具有相同的效果(资源不存在时可能返回 404)。例如: ```http DELETE /api/users/123 HTTP/1.1 Host: example.com ``` ### 语义与设计原则 HTTP 方法的设计遵循语义化原则,使开发者能够更清晰地表达请求意图。GET 用于获取数据,POST 用于提交数据,PUT 用于更新数据,DELETE 用于删除数据。这种区分有助于构建 RESTful API,提高系统的可维护性可扩展性[^1]。 ### 安全性与幂等性总结 | 方法 | 安全性 | 幂等性 | |--------|--------|--------| | GET | 是 | 是 | | POST | 否 | 否 | | PUT | 否 | 是 | | DELETE | 否 | 是 | 安全性指该方法是否不应改变服务器状态,幂等性指多次相同请求是否具有相同效果。 ### 使用场景对比 - **GET**:用于获取资源列表、查询特定资源。 - **POST**:用于创建新资源、提交表单数据。 - **PUT**:用于更新已有资源的全部属性。 - **DELETE**:用于删除资源。 这些方法的选择应基于请求的实际目的,以确保 API 的一致性可预测性[^1]。 ---
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值