JavaWeb - HTTP 请求中 Post 和 Put 区别

简介: JavaWeb - HTTP 请求中 Post 和 Put 区别

put 和 post 的技术实现上应该是没有很大区别的。但在于协议上语义是很大区别。



那么区别是什么?

首先,HTTP协议使用的是URI,是一种表示资源标志,那么对应的HTTP Verb就是各种对资源的操作,GET,PUT,DELETE等,明确这些,再往下看。

PUT:client对一个URI发送一个Entity,服务器在这个URI下如果已经又了一个Entity,那么此刻服务器应该替换成client重新提交的,也由此保证了PUT的幂等性。如果服务器之前没有Entity ,那么服务器就应该将client提交的放在这个URI上。总结一个字:PUT。

对的,PUT的方法就是其字面表意,将client的资源放在请求URI上。对于服务器到底是创建还是更新,由服务器返回的HTTP Code来区别。

注:通过上面可以知道,如果用PUT来达到更改资源,需要client提交资源全部信息,如果只有部分信息,不应该使用PUT(因为服务器使用client提交的对象整体替换服务器的资源)。

POST:这个Verb是比较特殊。不同于一般的增删改,使用场景比较多。根据RFC文档上描述,有以下几个场景:(https://tools.ietf.org/html/rfc2616#section-9.5

- Annotation of existing resources;
- Posting a message to a bulletin board, newsgroup, mailing list, or   
  similar group of articles;
- Providing a block of data, such as the result of submitting a
  form, to a data-handling process;
- Extending a database through an append operation.

因为服务器在实现POST是不可预知,所以将其定义为不安全、不幂等的Verb。基本上不能方便的归纳为“增删改”之类的行为,都可以使用POST方法。(可以用于“创建不由client决定URI的资源”,但本质上跟第三个有点儿类似,所以我在使用时,基本按照第三个去理解)。另外使用POST去实现“部分更新资源”可以不错的。

如果只有语义上的区别,那么不遵守有什么问题呢?


如果只是个人开发或者公司内部这么规定,那也没有很大问题。但是规范上来说,不好。

规范带来的好处是很多的,就像是开发人员的语言一样,当大家遵守同样的规范,沟通才更容易,不至于导致出现问题。公司内部还行,但是如果牵涉到外部工具或者其他公司开发合作,那还是会有问题的。举个比较严重的例子。

chrome浏览器为了加快页面加载,会在页面预加载某些GET链接(跳转链接,非资源链接),这样用户点那个链接时,加载速度就很快。有一个图片还是什么网站,使用GET请求,参数里面有个OPT用来表示动作。用户打开页面时,嵌入了OPT=“DEL”的链接在图片附近的表单中,然后就被Chrome删除了。

再举个其他可能接触的例子。公司可能使用工具解析client请求,来分析请求的分布等信息。如果client的User-Agent字段没有遵守协议标准,那么工具将无法正确统计,这样的例子很多。

标准的存在意义就是为了统一概念,这样即使从未见面的人,各个国家不同语种的人,甚至火星人也能轻松交流。最好的例子就是数学了。(HTTP很复杂,这里只是简单说下。留简去繁)

 

转自:https://www.zhihu.com/question/48482736

目录
相关文章
|
20天前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
73 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
2天前
|
JSON JavaScript 前端开发
什么是HTTP POST请求?初学者指南与示范
HTTP POST请求是一种常用的HTTP方法,主要用于向服务器发送数据。通过合理设置请求头和请求主体,可以实现数据的可靠传输。无论是在客户端使用JavaScript,还是在服务器端使用Node.js,理解和掌握POST请求的工作原理和应用场景,对于Web开发至关重要。
57 18
|
2天前
|
JSON 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
42 2
|
19天前
|
Web App开发 大数据 应用服务中间件
什么是 HTTP Range请求(范围请求)
HTTP Range 请求是一种非常有用的 HTTP 功能,允许客户端请求资源的特定部分,从而提高传输效率和用户体验。通过合理使用 Range 请求,可以实现断点续传、视频流播放和按需加载等功能。了解并掌握 HTTP Range 请求的工作原理和应用场景,对开发高效的网络应用至关重要。
58 15
|
23天前
|
数据采集 JSON 测试技术
Grequests,非常 Nice 的 Python 异步 HTTP 请求神器
在Python开发中,处理HTTP请求至关重要。`grequests`库基于`requests`,支持异步请求,通过`gevent`实现并发,提高性能。本文介绍了`grequests`的安装、基本与高级功能,如GET/POST请求、并发控制等,并探讨其在实际项目中的应用。
32 3
|
28天前
|
前端开发 UED 开发者
CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度
本文探讨了CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度;图标字体则以字体形式呈现图标,便于调整样式。文章分析了两者的优缺点及应用场景,并提供了应用技巧和注意事项,旨在帮助开发者提升页面性能,改善用户体验。
24 5
|
1月前
|
JSON API 数据格式
Python中获取HTTP请求响应体的详解
本文介绍了如何使用Python的`requests`和`urllib`库发送HTTP请求并处理响应体。`requests`库简化了HTTP请求过程,适合快速开发;`urllib`库则更为底层,适用于性能要求较高的场景。文章详细演示了发送GET请求、处理JSON响应等常见操作。
50 3
|
1月前
|
安全 API 网络安全
使用OkHttp进行HTTPS请求的Kotlin实现
使用OkHttp进行HTTPS请求的Kotlin实现
|
20天前
|
Web App开发 网络安全 数据安全/隐私保护
Lua中实现HTTP请求的User-Agent自定义
Lua中实现HTTP请求的User-Agent自定义
|
1月前
|
前端开发 JavaScript Java
如何捕获和处理HTTP GET请求的异常
如何捕获和处理HTTP GET请求的异常